[SOLVED][perl] open or not die !?
чорд... вот только сегодня тот же самый вопрос возникал кучу раз в PHP
моя прога про голосования уже здорово шурстит по разным турам и всё обсчитывает, вот код подкрашиваю, чтобы на ошибки проверялось на всякий пожарный
unless (open($input, $filename {
print STDERR "Can't open $filename: $!\n";
return;
}
А что-нибудь вроде
if(!(open FILE, "$MYFILE" {
# fine, no file yet. who cares :)
something else
}
в перле работать не будет?
хз,можешь проверить
Perl хочет, чтобы после or был чётко один оператор.Perl хочет чтобы or использовался подобающе бинарному оператору, возвращающему дизъюнкцию своих аргументов
В твоих примерах первым аргументом будет значение выражения open FILE, "$MYFILE" (не-ноль в случае успешного открытия файла, undef в случае ошибки).
Пытаться использовать блок в качестве второго аргумента - странно, ведь блок не является выражением.
Если очень хочется несколько операторов после or поставить - раздели из запятыми и возьми все вместе в скобки. Если я правильно помню, должно заработать.
В общем, я тут фигню наверное написал, а по делу - ботай perldoc perlop
Тебе это нужно, ты и проверяй. А у меня и перла-то нету.
вот только сегодня тот же самый вопрос возникал кучу раз в PHPБотай пост а, он всё правильно объяснил (по крайней мере, для php).
да не, я к этому выводу и сам в итоге пришел, но было бы удобно - чисто по-человечески код писать
а может этот блок просто в do{} взять?
Сам-то как думаешь, if(fopen(...) or do { ... } ) { } - будет синтаксически правильной конструкцией?
ЗЫ: В принципе, особые извращенцы могут пользоваться fopen(...) or eval(... но это медленно и неудобочитаемо (никакой подсветки синтаксиса, перехода к определениям...)
Perl хочет чтобы or использовался подобающе бинарному оператору, возвращающему дизъюнкцию своих аргументовдык значит можно использовать несколько or?
опенфайл or операция1 or операция2 ...;
Ага, но если тее это надо, чтобы выполнить несколько операций, если не удалось открыть файл - нихрена не выйдет, если операция1 вернёт true, никакие другие операции выполнены не будут.
if(!blabla) эквивалентно unless(blabla)
Очень простой способ понять, правильно ли написал - заключить всё в if.Ты не прав. Оператор do{} можно применять как раз для этого, чтобы вставить блок в подобных местах:
Сам-то как думаешь, if(fopen(...) or do { ... } ) { } - будет синтаксически правильной конструкцией?
ЗЫ: В принципе, особые извращенцы могут пользоваться fopen(...) or eval(... но это медленно и неудобочитаемо (никакой подсветки синтаксиса, перехода к определениям...)
$ cat > test.pl
#!/usr/bin/perl
0 or do { print "test\n"; print "test2\n"; };
if (0 or do { print "test\n"; print "test2\n"; }) { print "test3\n"; }
^D
$ perl test.pl
test
test2
test
test2
test3
unless( fopen(...) ) {
// some code
}
когда some code - тривиальная операция.
Но нахрена использовать этот синтаксис вместо полноценного
unless( fopen ) {
// много кода
}
я не понимаю. Это примерно то же самое, как спросить, а можно ли кроме переменной $_ использовать ещё пару-тройку переменных по умолчанию, чтобы применять к ним всем регулярные выражения одновременно, вместо того, чтобы дать этим переменным имена. Или можно ли в foreach в PHP использовать сразу несколько массивов и сложные выражения для итерации и условия конца цикла, вместо того, чтобы использовать цикл for.
Какая нафиг разница для чего? Вопрос был в том как это сделать. Такая возможность есть (do{}). А хорошо это или плохо - это уже другой вопрос. В перле, вообще говоря, много подобных спорных моментов.
А хорошо это или плохо - это уже другой вопросТ.е. нормально на вопрос "Известны сумма и произведение двух чисел. Как их найти?" отвечать "Перебором" ?
ты можешь перебрать множество комплексных чисел?
А ты отведенные типу биты перебрать не можешь что ли? %)
PS вообще-то это был риторический оффтопик
ЗЗЫ не везде ж можно побитам все перебрать
Ну мы же не в Study. Следует учитывать контекст
Т.е. нормально на вопрос "Известны сумма и произведение двух чисел. Как их найти?" отвечать "Перебором" ?Ну тут немного другое. Просто в Перле полно конструкций подобного вида и сделаны они для того, чтобы можно было сокращать запись. Ну такая идеология у Перла. Если бы это была Ява какая-нибудь, тогда можно было бы хаить - типа некошерная конструкция не должна использоваться и тому подобное.
Оставить комментарий
oyuriyu
Почему-то в перле такой код не работает :Perl хочет, чтобы после or был чётко один оператор. Как это можно побороть ?
PS тоже не работает
РЕШЕНИЕ