Perl if заявление - PullRequest
       1

Perl if заявление

1 голос
/ 09 ноября 2010

я видел

if(cond) {} elsif(cond2) {} else {}
statement if(cond)
unless(cond) {}

но есть ли

statement if(cond)
statement2 elsif(cond)
statement3 else

и

if(cond) {} 
elsun(cond){} //un meaning else unless

Ответы [ 3 ]

8 голосов
/ 09 ноября 2010

Нет, см. perldoc perlsyn .

3 голосов
/ 09 ноября 2010

Нет, есть только первый.

Трейлинг if, вероятно, более точно отображается как:

statement if cond

То есть, нет необходимости в скобках вокруг условия (так как они не нужны для устранения неоднозначности).

0 голосов
/ 09 ноября 2010

В значительной степени:

print "foo\n" if ($foo eq $bar);

является ярлыком для

if ($foo eq $bar) {
    print "foo\n";
}

И я редко использую предыдущий, потому что во втором примере выражение if более очевидно, чем в первом примере. Единственный раз, когда я использовал постфикс if, это что-то вроде этого:

next if ($line =~ /^\s*$/);

Обычно этого достаточно, чтобы поймать.

Возможно, вы захотите попробовать:

use Switch;
switch ($val) {
    case 1          { print "number 1" }
    case "a"        { print "string a" }
    case [1..10,42] { print "number in list" }
    case (\@array)  { print "number in list" }
    case /\w+/      { print "pattern" }
    case qr/\w+/    { print "pattern" }
    case (\%hash)   { print "entry in hash" }
    case (\&sub)    { print "arg to subroutine" }
    else            { print "previous case not true" }
}

что, я думаю, вы действительно ищете. Кстати, у меня были проблемы с Switch, и он не работает с старых версий Perl (до Perl 5.8).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...