Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Perl: Общие вопросы > Че за операция y()?


Автор: Danissimo 8.12.2006, 14:32
x.pl:
Код

x();
sub x {
    my @Response = ('a', 'b');
    y();
    print join "\n", @Response;
}
sub y {
    @Response = ();
}



Если выполнять его так:
$ perl -W x.pl
Name "main::Response" used only once: possible typo at x.pl line 8.
Use of uninitialized value in transliteration (tr///) at x.pl line 4.

Если так:
$ perl x.pl
то вобще ничего.

Если в 4 строчке вызов y() заменить на z() и в 7 имя изменитьна z, то все работает.

Что такое y()?

Автор: Nab 8.12.2006, 14:40
perldoc perlfunc

Автор: korob2001 8.12.2006, 14:46
y/// тоже самое что и tr///; Ты назвал подпрограмму зарезервированным именем, потому запуск программы с ключём -W выдаёт тебе предупреждение.

Автор: Danissimo 8.12.2006, 15:09
Получается, что скобки, как, например, в С не являются указанием на то, что встреченное имя -- это имя функции.

Знакомясь с перлом все больше и больше, я прихожу вот к каким выводам:
1. Определить функцию в перле нельзя. Только подпрограмму. И слово sub на это недвусмысленно указывает. На первый взгляд функция, подпрограмма кажутся игрой слов. Однако это, похоже, не так.
2. Скобки всего лишь обозначают список. Причом массив и список -- разные вещи. Список -- это нечто, связанное с контекстом выполнения. Массив -- хранилище.

Ваши мысли?

Автор: korob2001 8.12.2006, 15:56
sub имя { } - функция, метод, подпрограмма, процедура. Как нравится, так и называй. Лично я называю подпрограмма, если же речь идёт об ООП, тогда метод.

Вот нескольк примеров работы со списками и массивами.
Код

# Массиву присваиваем список.
my @arr = ('first','second');
# Списку привсваиваем массив.
my($first,$second) = @arr;
# Поменяем местами значения переменных $first и $second.
($first,$second) = ($second,$first);

Заметь, что не нужно создавать временную переменную.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)