簡體   English   中英

將數組傳遞給子程序 Perl

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM