[英]Passing array to subroutine Perl
我目前正在學習 Perl,我想將一個數組傳遞給子程序並打印它的內容。 我發現應該傳遞對數組的引用,但是我遺漏了一些東西:
arrayPrint($a,$b,\@array);
sub arrayPrint{
my ($a,$b,@array) = @_;
for(my $i=0; $i<=$#array;$i++){
print $file $a.$b.$array[i]."\n";
}
}
您不能將數組(或哈希)傳遞給 subs。 您只能將標量傳遞給 subs。 (而且它們只能返回標量。)
我們可以做的是傳遞對數組(或哈希)的引用。 引用是標量。 事實上,這就是你正在做的事情。
問題是您將其分配給數組。 一個總是只包含一個標量的數組只會讓事情變得復雜。 它應該分配給一個標量。 並且應該作為參考。
sub arrayPrint {
my ( $x, $y, $array ) = @_;
for my $e ( @$array ) {
say $fh "$x$y$e";
}
}
arrayPrint( $x, $y, \@array );
另一種方法是將數組的每個元素傳遞給子。
sub arrayPrint {
my ( $x, $y, @array ) = @_;
for my $e ( @array ) {
say $fh "$x$y$e";
}
}
arrayPrint( $x, $y, @array );
或者
sub arrayPrint {
my $x = shift;
my $y = shift;
for my $e ( @_ ) {
say $fh "$x$y$e";
}
}
arrayPrint( $x, $y, @array );
不要使用特殊變量$a
和$b
作為詞法,它會破壞sort
。
您的代碼正在發送對子例程的數組引用,但用它填充數組。 子例程中的 @array 將有一個元素:數組引用。
您可以直接發送數組,這實際上會將其所有成員作為單獨的參數發送(如果數組很大,則非常糟糕)。
或者,發送引用,但用它填充一個標量。 您不能直接將$#
與引用一起使用,但您需要取消引用它。
my ($x, $y, $array_ref) = @_;
for my $i (0 .. $#{$array_ref}) {
不過,更常見的是迭代元素而不是索引。
for my $e (@$array_ref) {
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.