LINUX.ORG.RU

Perl true/false


0

0

В PERL true=1, false = 0.
Есть ли определение в стандартных библиотеках perl
о переменных true/false или самому создавать такие переменные.

Как сделать переменную неизменяемой константой:
my $false = 0;
my $true = 1;


> В PERL true=1, false = 0.
> Есть ли определение в стандартных библиотеках perl
> о переменных true/false или самому создавать такие переменные.

Это только часть правды. false - это 0, "0", пустая строка и undef. Все остальное ("00", "0 but true", ", 1, -1, \undef, []) - это true

Да, и почему true и false должны быть переменными?

> Как сделать переменную неизменяемой константой:
> my $false = 0;
> my $true = 1;

perldoc constant

Но вообще это не perl-style (в смысле, константы тру-фолс, а не константы как таковые), и скорее затрудняет чтение, чем облегчает.

anonymous
()

> В PERL true=1, false = 0. 

Ви пёрл с паскакалем случайно не спутали?

$ perl -e '$a= 7; if ($a) { print "TRUE\n"}  else { print "FALSE\n" }'
TRUE

> Как сделать переменную неизменяемой константой:

http://www.xav.com/perl/lib/constant.html

anonymous
()
Ответ на: комментарий от anonymous

>Но вообще это не perl-style (в смысле, константы тру-фолс, а не константы как таковые), и скорее затрудняет чтение, чем облегчает.

Спорный вопрос.
Сравниваем несколько выражений, результат нужен true/false,
а не $ret="просто длинная строка символов" :)

Все новые модули на CPAN используют объектную технологию,
хотя без нее можно обойтись.

WinLin
() автор топика

Можно ли сократить такую конструкцию:
if ($str eq 'f1' || $str eq 'f454' || $str eq 'f24545')

На примерно такое:
if (inlist($str,'f1','f454','f24545'))

WinLin
() автор топика
Ответ на: комментарий от WinLin

> if ($str eq 'f1' || $str eq 'f454' || $str eq 'f24545')

if($str =~ /^(f1|f454|f24545)$/)

anonymous
()

а зачем в перл вообще это может понадобиться??? Если ты всё нормально пишешь, то эти переменные тебе НИКОГДА не понадобятся

golodranez ★★★★
()
Ответ на: комментарий от WinLin

> if ($str eq 'f1' || $str eq 'f454' || $str eq 'f24545') 

if ( grep /^$str$/, ("f1", "f454", "f24545") )

swizard
()

>Как сделать переменную неизменяемой константой:
>my $false = 0;
>my $true = 1;

Не вспомнили про такой вариант:
my $false=\0;
my $true=\1;
print "$$false\n";
print "$$true\n";

josephson ★★
()
Ответ на: комментарий от josephson

> Не вспомнили про такой вариант: my $false=\0;

Ооо, да.

Особенно круто после этого работает код

if ($false) { whaddayathink_will_happen() }

anonymous
()
Ответ на: комментарий от anonymous

Нет, вот так:

if($$false)#...

А теперь сравним вариант, предложенный anonymous (*) (06.08.2007 11:01:59) и предложенный мной:

#/usr/bin/perl
use constant FALSE=>0;
use constant TRUE=>1;
if(FALSE){print "1\n";}
else{print "2\n";}

#/usr/bin/perl
my $false=\0;
my $true=\1;
if($$false){print "1\n";}
else{print "2\n";}

Не вижу разницы.

josephson ★★
()
Ответ на: комментарий от josephson

> Не вижу разницы.

первый вариант кода не позволяет допустить "незаметную" ошибку, в отличие от второго. И читается ну на порядок лучше: сразу понятно, что FALSE - константа (ну правда же, навряд ли это файлдескрипто? %), в отличие от разыменования указателя на скаляр, в котором может быть неизвестно что.

Если уж очень хочется иметь константный $false - то правильный способ это tie.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.