В чем разница shift и shift (@_) ?

Модератор: Модераторы разделов

green_guy
Сообщения: 48

В чем разница shift и shift (@_) ?

Сообщение green_guy »

Если в файле test.pl содержится:

Код: Выделить всё

#!/usr/bin/perl -w
print shift;

то получаю:

Код: Выделить всё

bash-2.05b$ ./test.pl adcd
adcdbash-2.05b$

как и должно быть.
Но если:

Код: Выделить всё

#!/usr/bin/perl -w
print shift(@_);

то:

Код: Выделить всё

bash-2.05b$ ./test.pl adcd
Use of uninitialized value in print at ./test.pl line 2.

хотя разницы, по-моему, в первом и во втором случаях быть не должно.
Gentoo, kernel 2.6.11, Gnome, Sawfish, vim
Спасибо сказали:
Аватара пользователя
Asgard
Сообщения: 215
Статус: North Valfader

Re: В чем разница shift и shift (@_) ?

Сообщение Asgard »

Просто массив @_ характерен _только_ для функций, вместо него следует использовать @ARGV. Например:

Код: Выделить всё

#!/usr/bin/perl -w

print "\@_ isn't defined\n" if(!defined @_);
while(@ARGV) { print shift(@ARGV)."\n" }

...

Код: Выделить всё

./test.pl one two three etc

выдаёт:

Код: Выделить всё

@_ isn't defined
one
two
three
etc
sator arepo tenet opera rotas ;)
------------------------------------------------------------
LJ
Спасибо сказали:
green_guy
Сообщения: 48

Re: В чем разница shift и shift (@_) ?

Сообщение green_guy »

Спасибо! Оказалось, невнимательно прочитал

Код: Выделить всё

$perldoc -f shift
Gentoo, kernel 2.6.11, Gnome, Sawfish, vim
Спасибо сказали: