Perl 5 では、シジル ($@%&*
変数名の前) は、使用している変数の型ではなく、値へのアクセスの結果として期待される型に近いものを示します。これは、Perl の 1 つの同じステートメントが、リストとスカラーのコンテキストに応じて異なる評価をする可能性があるため重要です。
つまり、配列が@a = (1, 2, 3, 4, 5)
あり、最初の要素がスカラー 1
の場合、としてアクセスします$a[0]
。
ただし、一度に複数の要素にアクセスすることはできます:はlist@a[0 .. 2, -1]
を返すため、これはシジルで配列要素にアクセスする唯一のケースです。 (1, 2, 3, 5)
@
したがって、 Perl を と一緒に使用すると、@lat[0]
とを書く@lon[0]
ことができる場合もありますがno strict
、これはやや悪いスタイルであり、常に and と書く必要が$lon[0]
あり$lat[0]
ます。
ループ内で構築し、後でand を$data
必要としない場合は、配列の最初の要素を使用できます。@lat
@lon
shift
while (@lat and @lon) { # a condition is a scalar context — evaluates to array *length*
my $data = {
type => 'Feature',
geometry => {
type => 'Point',
coordinates => [shift @lon, shift @lat],
},
};
# insert data point
}
@lat
このループは、と に要素がある限り実行されます@lon
。ただし、座標を個別lon
のlat
値としてモデル化すると、DB への挿入が容易になり、データの取得が容易になる場合があります。
geometry => {
type => 'Point',
lon => (shift @lon),
lat => (shift @lat),
},