perl reference subroutine

Pasar matriz y escalar a una subrutina Perl



reference subroutine (5)

Pase su matriz a la subrutina de calc como una referencia de matriz:

calc(/@array, $scalar);

Luego, en su subrutina de cálculo, inicializa sus parámetros de entrada de esta manera:

sub calc { my($array_ref, $scalar) = @_; foreach my $item (@$array_ref) { # process each item in the array ref } }

Posible Duplicado: ¿Cómo pasar una matriz y una cadena como argumentos a una función?

Tengo una función, o subrutina, que toma el primer parámetro como una matriz y el segundo parámetro como un escalar. Por ejemplo,

sub calc { my @array = $_[0]; my $scalar = $_[1]; print @array, $scalar; }

El problema es que la función hace que la matriz sea igual al primer valor de la matriz pasada, y el escalar sea el segundo valor de la matriz que se pasa. Cuando quiero que la primera matriz sea toda la matriz, no lo hago. necesita hacer una copia profunda de la matriz. Por ejemplo,

my @array = (''51'', ''M''); my $scalar = 21;

y

calc(@array, $scalar)

imprimirá 51 M cuando quiero 51 M 21 .


Debe pasarlo como referencia:

calc(/@array, $scalar)

Y luego acceda a él como: my @array = @{$_[0]};


Puede pasar una referencia a la matriz a su función:

calc(/@array, $scalar);

Cuando necesite acceder a elementos de @array en su subrutina, puede hacerlo así:

my $array = $_[0]; # access first element of array print $array->[0];

Editar: como se trata de una referencia a la matriz original, cualquier cambio realizado en la subrutina se reflejará en la matriz original.


La lista de argumentos en una subrutina Perl es simplemente una matriz plana. Si desea pasar una matriz distinta, debe pasarla como una matriz de referencia.


Utilice una referencia a la matriz como primer argumento o invierta los argumentos para que el escalar sea primero y la matriz aparezca después:

sub reversed_args { my($scalar, @array) = @_; # ... print @array, $scalar, "/n"; } my @array = (''51'', ''M''); my $scalar = 21; reversed_args($scalar, @array);

No pruebe prototipos Perl (dos artículos, uno en Desbordamiento de pila, uno en PerlMonks ).