2011-11-07 14 views
9

は、このコードを検討:関数から返された配列(splitなど)を配列参照に変換するにはどうすればよいですか?

@tmp = split(/\s+/, "apple banana cherry"); 
$aref = \@tmp; 

洗練ことに加え、上記のコードが壊れています。私はこのラインでそれに従って言う:今

@tmp = split(/\s+/, "dumpling eclair fudge"); 

$$aref[1]は「エクレア」の代わりに「バナナ」です。

一時変数の使用を避けるにはどうすればよいですか?

概念的には、私はあなたが、配列-REFをしたい場合は、これを行うことができます

$aref = \@{split(/\s+/, "apple banana cherry")}; 
+4

関数は配列を返すことはできません。 'split'は、どんなサブと同様、スカラーのリストを返します。 – ikegami

答えて

19

のようなものを考えています:

my $aref = [ split(/\s+/, "apple banana cherry") ]; 
3

私はそれを考え出した:

$aref = [split(/\s+/, "apple banana cherry")]; 
2

私はムーの答えが好きですが(ここではそのアプローチを最初に使用します)、変数はかなり簡単にスコープできます関数の使用を想像してください:

my $aref = do { 
    my @temp = split(/\s+/, "apple banana cherry"); 
    \@temp; 
}; 
print join("-", @$aref), "\n"; 
# with warnings: Name "main::temp" used only once: possible typo at ... 
# with strict: Global symbol "@temp" requires explicit package name at ... 
print join("-", @temp), "\n"; 

ハッピーコーディング。

関連する問題