Главная страница


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)
 
 

Вернуться к списку тем, сортированных по: возрастание даты  уменьшение даты  тема  автор 

 Тема:    Автор:    Дата:  
 Передать параметр из подпрограммы   Soft   22 Feb 2002 00:15:14 
 Re: Передать параметр из по дпрограммы   Andrey Sapozhnikov   22 Feb 2002 17:17:40 
 Re: Передать параметр из по дпрограммы   Victor Wagner   22 Feb 2002 19:27:50 
 Re: Передать параметр из по дпрограммы   Andrey Sapozhnikov   23 Feb 2002 04:26:17 
 Re: Передать параметр из по дпрограммы   Victor Wagner   23 Feb 2002 12:16:04 
 Re: Передать параметр из по дпрограммы   Andrey Sapozhnikov   24 Feb 2002 03:04:47 
 Re: Передать параметр из по дпрограммы   Victor Wagner   24 Feb 2002 11:24:27 
 Re: Передать параметр из подпрограммы   Artem Chuprina   22 Feb 2002 17:24:49 
 Re: Передать параметр из подпрограммы   Soft   26 Feb 2002 20:02:49 
 Re: Передать параметр из подпрограммы   Andrey Sapozhnikov   27 Feb 2002 00:12:35 
 Re: Передать параметр из подпрограммы   Victor Wagner   22 Feb 2002 17:34:09 
 Re: Передать параметр из подпрограммы   Igor S Chencov   22 Feb 2002 17:41:28 
 Re: Передать параметр из подпрограммы   ‚« ¤Ё¬Ёp ѓpҐЎ­Ґў   22 Feb 2002 19:09:53 
Архивное /ru.perl/5284c84e36ec.html, оценка 2 из 5, голосов 10
Яндекс.Метрика
Valid HTML 4.01 Transitional