Właśnie spojrzał z niedowierzaniem na tej sekwencji:Lista argumentów podprogramu perl - "przekazać przez alias"?
my $line;
$rc = getline($line); # read next line and store in $line
I zrozumiał cały czas, że argumenty Perl były przekazywane przez wartość, więc kiedy mam potrzebne do przekazania w dużej strukturze, albo przekazać w zmiennej być zaktualizowany, zdałem ref.
Czytając drobnym drukiem w perldoc, dowiedziałem się, że @_ składa się z aliasów do zmiennych wymienionych na liście argumentów. Po przeczytaniu następnego fragmentu danych, getline() zwraca je z $ _ [0] = $ dane;, który przechowuje $ dane bezpośrednio w $ linia.
Ja podoba mi się to - to jak przekazywanie przez odniesienie w C++. Jednak nie znalazłem sposobu na przypisanie bardziej znaczącej nazwy do $ _ [0]. Czy jest jakiś?
Tak, Perl jest zawsze przekazywany przez odniesienie – newacct
Cóż - nie mylić z referencjami Perla, które są bardziej jak wskaźniki C, ponieważ muszą być jawnie dereferencyjne. – Chap
Nie byłby $ arg = shift; $ arg = $ data; zrób to? Czy zamiast tego "przesunięcie" spowoduje utworzenie kopii argumentu? EDYCJA: Przetestowałem adresy przekazanego skalaru i argument "shift", a wyniki mówią, że shift robi kopię, więc przypisanie do $ arg jak wyżej nie wpłynie na linię $ zgodnie z przeznaczeniem. :( – sundar