2017-09-15 7 views
0

最初の関数内で配列を出力しましたが有効です。私は2番目の機能でそれを印刷することはできません。配列参照perlを印刷できません

エラーメッセージ:ARRAY REFとして文字列( "1")を使用できないConvertToVformat.plラインでの使用における "厳密な参考文献" 24

my $dir = cwd(); 
my $source_files = DetermineSourceFiles(); 
DetermineFileInfo($source_files); 

sub DetermineSourceFiles { 
    my @source_files; 
    opendir my $dh, $dir or die "Cant open $dir: $!"; 
    while (my $file = readdir($dh)) { 
     if ($file =~ /(.*?\d+.bin)/) { 
      push @source_files, $file; 
     } 
    } 
    closedir $dh; 
    return \@source_files; 
} 

sub DetermineFileInfo { 
    my $source_files = (@_); 
    foreach my $file (@$source_files) { 
     print "$source_files\n"; 
    } 
} 
+1

'my $ source_files =(@ _);'という行は '$ source_files'スカラーに割り当てられ、スカラーコンテキストになります。ここで配列の要素の数、ここでは '1'を使います。 'my($ source_files)= @ _; 'と置き換えてください。数日前から実際には重複:[this post](https://stackoverflow.com/a/46232503/4653379)を参照してください。 – zdim

+0

ありがとう、その問題を修正しました。また、$ source_filesの前後にかっこを入れるだけで問題は解決しました。私はシフトの目的を理解していません – jelly

+0

エラーはまったく同じなので(コードは違っていますが)、同じリンクで上記のコメントが解決されたので、重複としてマークしています。これに問題がある場合はお知らせください。 – zdim

答えて

0

使用

my $source_files = shift; 

一方代わりに

my $source_files = (@_); 

の詳細はdocumentation of shiftを参照してください。

関連する問題