The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  вход/выход  слежка  RSS
"Проверка: определена ли переменная?"
Вариант для распечатки  
Пред. тема | След. тема 
Форум Программирование под UNIX (Perl)
Изначальное сообщение [ Отслеживать ]

"Проверка: определена ли переменная?"  +/
Сообщение от breeze (ok) on 07-Авг-11, 14:31 
Добрый день.

Есть скрипт:

#!/usr/bin/perl

use utf8;
use warnings;
use strict;

my $var1;
my $var2 = "0";
my $var3 = 0;
my $var4 = "a";

print isDef($var1)."\n";
print isDef($var2)."\n";
print isDef($var3)."\n";
print isDef($var4)."\n";

sub isDef {
  if (shift) {
    return "true";
  } else {
    return "false";
  }
}

После выполнения получаем результат:

./test.pl
false
false
false
true

Первая переменная действительно не определена, но почему вторая и третья тоже?

p.s. Perl v5.14.1 built for i386-freebsd-thread-multi-64int

Ответить | Правка | Cообщить модератору

Оглавление

Сообщения по теме [Сортировка по времени | RSS]


1. "Проверка: определена ли переменная?"  +/
Сообщение от breeze (ok) on 07-Авг-11, 14:49 
Ответ уже сам нашел…

A simple Boolean test will not distinguish among undef, zero, the empty string, and "0" , which are all equally false.

Если кому интересно, решение работает:

sub isDef {
return (defined shift) ? 'true' : 'false';
}

Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

2. "Проверка: определена ли переменная?"  +/
Сообщение от XoRe (ok) on 07-Авг-11, 23:50 
Для ключей хеша ещё есть проверка на if(exists $hash{key})
Ответить | Правка | ^ к родителю #1 | Наверх | Cообщить модератору

3. "Проверка: определена ли переменная?"  +/
Сообщение от cirus on 10-Авг-11, 01:21 
Натуральный быдлокод.


Ответить | Правка | ^ к родителю #1 | Наверх | Cообщить модератору

4. "Проверка: определена ли переменная?"  +/
Сообщение от anonymous (??) on 14-Авг-11, 19:40 
> Натуральный быдлокод.

А как правильно?

Ответить | Правка | ^ к родителю #3 | Наверх | Cообщить модератору

5. "Проверка: определена ли переменная?"  +/
Сообщение от cirus on 03-Сен-11, 02:11 
Правильно не делать еще одну безполезную функцию. Есть defined и его достаточно.


Ответить | Правка | ^ к родителю #4 | Наверх | Cообщить модератору

6. "Проверка: определена ли переменная?"  +/
Сообщение от serg_56 on 15-Сен-11, 16:59 
> Правильно не делать еще одну безполезную функцию. Есть defined и его достаточно.

товарищ просто проверял как работает if, а if от 0 дает false, потому и получилось как получилось.


Ответить | Правка | ^ к родителю #5 | Наверх | Cообщить модератору

7. "Проверка: определена ли переменная?"  +/
Сообщение от cirus on 17-Сен-11, 00:06 
Извиняюсь. Действительно не понял авторского замысла. Но все равно пара замечаний.

Во-первых, совершенно не понятно из чего исходил автор, когда давал имя функции isDef. Проверяет она на истина/ложь, а не на определено/не_определено. Эта неточность влечет неверные выводы в дальнейших рассуждениях.

Во-вторых, Perl мы любим за краткость:
sub isTrue { shift ? 'true' : 'false' }

Ответить | Правка | ^ к родителю #6 | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру