perl one liner parameter sequence

Все, что вы хотели знать о программизме, но боялись спросить.
Ответить
Аватара пользователя
Gaziz
Житель
Сообщения: 944
Зарегистрирован: 17 фев 2003, 15:57
Откуда: Almaty-Toronto-Vancouver-Seattle

perl one liner parameter sequence

Сообщение Gaziz »

Привет,

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

gnugmanov@jekyll@~/morespace>echo test | perl -enal 'print "hi\n";'
gnugmanov@jekyll@~/morespace>echo test | perl -lane 'print "hi\n";'
hi

gnugmanov@jekyll@~/morespace>
Аватара пользователя
sobomax
Маньяк
Сообщения: 3699
Зарегистрирован: 29 июн 2006, 22:53
Откуда: Vancouver

Re: perl one liner parameter sequence

Сообщение sobomax »

Gaziz писал(а):Привет,

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

gnugmanov@jekyll@~/morespace>echo test | perl -enal 'print "hi\n";'
gnugmanov@jekyll@~/morespace>echo test | perl -lane 'print "hi\n";'
hi

gnugmanov@jekyll@~/morespace>
$ man perlrun
[...]
-e commandline
may be used to enter one line of program. If -e is given, Perl
will not look for a filename in the argument list. Multiple -e
commands may be given to build up a multi-line script. Make sure
to use semicolons where you would in a normal program.
[...]

Это означает что в первом случае ты пытаешся исполнить скрипт состоящий из одной строки "nal". Странно что оно тебя не послало куда нибудь подальше. ;-)

-Maxim
bormo
Пользователь
Сообщения: 194
Зарегистрирован: 19 май 2006, 21:03
Откуда: + 1 604

Сообщение bormo »

так и есть.

[root@srv3058 root]# echo test | perl -e'print "hi\n"';
hi
Аватара пользователя
Gaziz
Житель
Сообщения: 944
Зарегистрирован: 17 фев 2003, 15:57
Откуда: Almaty-Toronto-Vancouver-Seattle

Re: perl one liner parameter sequence

Сообщение Gaziz »

sobomax писал(а):
Gaziz писал(а):Привет,

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

gnugmanov@jekyll@~/morespace>echo test | perl -enal 'print "hi\n";'
gnugmanov@jekyll@~/morespace>echo test | perl -lane 'print "hi\n";'
hi

gnugmanov@jekyll@~/morespace>
$ man perlrun
[...]
-e commandline
may be used to enter one line of program. If -e is given, Perl
will not look for a filename in the argument list. Multiple -e
commands may be given to build up a multi-line script. Make sure
to use semicolons where you would in a normal program.
[...]

Это означает что в первом случае ты пытаешся исполнить скрипт состоящий из одной строки "nal". Странно что оно тебя не послало куда нибудь подальше. ;-)

-Maxim
Спасибо, понятно. Но не разумно :) Данные на выходе IMHO не должны зависить от перемены места параметров.
Аватара пользователя
sobomax
Маньяк
Сообщения: 3699
Зарегистрирован: 29 июн 2006, 22:53
Откуда: Vancouver

Re: perl one liner parameter sequence

Сообщение sobomax »

Gaziz писал(а): Спасибо, понятно. Но не разумно :) Данные на выходе IMHO не должны зависить от перемены места параметров.
Huh? По определению есть два типа параметров - параметр с аргументом и параметр без. -e это параметр с аргументом. Все что следует за параметром с аргументом до следующего пробела считается аргументом этого параметра, например:

-a foobar
-afoobar
-a "foo bar"

Учите матчасть в общем. ;-)

-Maxim
Ответить