|
ru.perl- RU.PERL ---------------------------------------------------------------------- From : Andrey Sapozhnikov 2:5020/400 22 Feb 2002 17:17:40 To : Soft Subject : Re: Передать параметр из по дпрограммы -------------------------------------------------------------------------------- Soft wrote: > Доброго времени суток, уважаеммый(ая) All > > Есть переменная. Есть подпрограмма, которая обрабатывает эту переменную. > &prog ("$example"); В данном случае кавычки излишни, излишен также и &. достаточно prog($example); (скобки иногда тоже можно опустить, но для начала пусть остаются) > sub prog { > something; > } > > Всё бы хорошо, но мне понадобилось изобразить следующее примерно таким > способом $example=(&prog ("$example")); другими словами чтобы записывать в > переменную $example результат программы, а вот как сделать, чтобон туда > записывался. аверно какая-то функция в перл есть, чтобы записать куда-то > результат выполнения программы и чтобы его можно потм было получить следующим > образом $example=(&prog ("$example")); В данном примере лучше использовать передачу параметра по ссылке. Собственно все параметры только так и передаются, и @_ является массивом неявных ссылок на передаваемые параметры. а не на их копии. Изменяя $_[0] мы изменяем значение параметра. пример1 (передача по значению): sub exclamation { my $line = $_[0]; # копирование первого аргумента в локальную переменную $line .= '!'; # Добавляем восклицательный знак в конец строки-копии return $line; # возвращаем значение } (или тоже самое в более коротком варианте, но менее понятном для начинающих: sub exclamation { $_[0] . '!' } ) вызов: my $example = 'Hello, world'; $example = exclamation($example); пример2 (передача по ссылке): sub exclamation { $_[0] .= '!'; # Добавляем восклицательный знак непосредственно к аргументу } вызов: my $example = 'Hello, world'; exclamation($example); пример3 (явная передача ссылки): sub exclamation { my $line_ref = $_[0]; # Копируем ссылку на строку в локальную переменную $$line_ref .= '!'; # Добавляем восклицательный знак к переменной на которую указывает ссылка } вызов: my $example = 'Hello, world'; exclamation(\$example); Третий вариант явно неоправдан, обычно явными ссылками передают более сложные структуры данных. Андрей P.S. Кстати, кавычки которые просто бесполезны (и вредны лишь затратами памяти на создание лишней копии переменной) в случае передачи по значению, станут фатальными при передаче по ссылке. Ведь операция "$example" есть не что иное, как создание строковой константы инициализированной значением $example. Ссылка на константу и будет передана в функцию, и, разумеется, константу изменить функция не сможет. --- ifmail v.2.15dev5 * Origin: Demos online service (2:5020/400) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.perl/5284c84e36ec.html, оценка из 5, голосов 10
|