あなたはハッシュと配列との混乱の参照があるを提供します。ハッシュと配列の両方が単に一覧表示されているので、だ
my %hash = (1 => 2, 3 => 4);
(空想リストが、私は話を戻そう):ハッシュを使用して宣言され
my @array = (1, 2, 3);
:
配列
を使用して宣言されます。
[]
と
{}
を使用する必要があるのは、リストに含まれている値を使用する場合、または両方のリストの参照を作成する場合(さらに下の方)のみです。
=>
は、彼らが同じことを行うものの、
%h = (a, 1)
が壊れるので、正常に動作します
%h = ("a", 1)
、左側を引用し、かつので
%h = (a => 1)
も正常に動作だけで、特別な(すなわち脂肪)、カンマ、であることを
注意a
は引用されます。
配列参照は、そのように宣言されています
my $aref = [1, 2, 3];
...あなたはスカラーに配列リファレンスを配置する必要があることに注意してください。そうしないと、このようにそれを行う場合:
my @array = [1, 2, 3];
...参照は、あなたが望むものはおそらくない@array
の最初の要素、にプッシュされます。
ハッシュリファレンスは、次のように宣言されている::
my $href = {a => 1, b => 2};
[]
は、アレイ(ないAREF)で使用されている唯一の時間あなたは要素を使用するためにそれを使用しているときです。ハッシュと同様に、参照でない限り、{}
を使用してキーの値を取得します($hash{a}
)。
今、あなたの問題を解決するために、あなたはこれらの変更と参照使い続けることができます。
use warnings;
use strict;
use Data::Dumper;
# declare an array ref with a list of hrefs
my $collection = [
{
'name' => 'Flo',
...
},
{
'name' => 'Flo1',
...
}
];
# dereference $collection with the "circumfix" operator, @{}
# ...note that $row will always be an href (see bottom of post)
foreach my $row (@{ $collection }) {
my $build_status = build_config($row);
print Dumper $build_status;
}
sub build_config {
# shift, as we're only accepting a single param...
# the $row href
my $collect_rows = shift;
return $collect_rows;
}
を...または非レフリーを使用するようにそれを変更します。
my @collection = (
{
'name' => 'Flo',
...
},
{
'name' => 'Flo1',
...
}
);
foreach my $row (@collection) {
my $build_status = build_config($row);
# build_config() accepts a single href ($row)
# and in this case, returns an href as well
print Dumper $build_status;
}
sub build_config {
# we've been passed in a single href ($row)
my $row = shift;
# return an href as a scalar
return $row;
}
私が書きましたPerlのリファレンスに関するチュートリアルはguide to Perl referencesに興味があります。 perlreftutもあります。
一つの最後の点、彼らは確かにハッシュ参照ですので...ハッシュは、配列の{}
内部で宣言されています。多次元データでは、Perlの構造の最上位レベルのみが複数の値を含むことができます。その下にあるものはすべてスカラー値でなければなりません。したがって、ハッシュの配列を持つことはできますが、技術的にも文字通り、その値が別の構造体へのポインタ(参照)であるスカラーを含む配列です。ポインタ/参照は単一の値です。
私はあなたが本当に '@collection =(...)'ではなく '@collection = [...]'を持っていると思います。さもなければ '$ VAR1 = 'ARRAY(0x20a1d68)';'のようなものが得られます。 – ThisSuitIsBlackNot
ha ..それらの違いは何ですか? (...)はハッシュ用、[...]は配列用です。私は正しい? @collection = [...]のように宣言されているためです。 – Raja