HHeLiBeXの日記 正道編

日々の記憶の記録とメモ‥

配列とハッシュの基礎サンプル

最近、Perlのプログラムに触れる機会ができたのだが、配列とかハッシュとか、記号が多すぎて理解が追い付かない。 「$」とか「@」とか「%」とか「\」とか。

なので、以下のページを参考にしながら、軽くサンプルを作ってみた。

#! /usr/bin/perl

# 別の変数に「コピー」を渡す
my @ary1 = (1,2,3);
my @ary2 = @ary1;

# 件数を取るときは、一旦スカラー変数に代入
my $ct = @ary1;
print $ct."\n";

# 「コピー」なので、元を変えても影響を受けない
push @ary1, 4;
for my $elem (@ary1) {
    printf "ary1 = $elem\n";
}
for my $elem (@ary2) {
    printf "ary2 = $elem\n";
}

# 別の変数に「参照(リファレンス)」を渡す
my $ary3 = [1,2,3];
my $ary4 = $ary3;

# 「参照(リファレンス)」なので、元を変えると先も変わる
push @$ary3, 4;
for my $elem (@{$ary3}) {
    printf "ary3 = $elem\n";
}
for my $elem (@{$ary4}) {
    printf "ary4 = $elem\n";
}

# 別の変数に「コピー」を渡す
my %hash1 = (e1 => 1, e2 => 2, e3 => 3);
my %hash2 = %hash1;

# 「コピー」なので、元を変えても影響を受けない
%hash1->{e4} = 4;
for my $key (sort keys %hash1) {
    printf "hash1 = %s = %s\n", $key, %hash1->{$key};
}
for my $key (sort keys %hash2) {
    printf "hash2 = %s = %s\n", $key, %hash2->{$key};
}

# 別の変数に「参照(リファレンス)」を渡す
my $hash3 = {e1 => 1, e2 => 2, e3 => 3};
my $hash4 = $hash3;

# 「参照(リファレンス)」なので、元を変えると先も変わる
$hash3->{e4} = 4;
for my $key (sort keys %{$hash3}) {
    printf "hash3 = %s = %s\n", $key, %{$hash3}->{$key};
}
for my $key (sort keys %{$hash4}) {
    printf "hash4 = %s = %s\n", $key, %{$hash4}->{$key};
}

出力は以下のような感じ。

Using a hash as a reference is deprecated at Main.pl line 38.
Using a hash as a reference is deprecated at Main.pl line 40.
Using a hash as a reference is deprecated at Main.pl line 43.
Using a hash as a reference is deprecated at Main.pl line 53.
Using a hash as a reference is deprecated at Main.pl line 56.
3
ary1 = 1
ary1 = 2
ary1 = 3
ary1 = 4
ary2 = 1
ary2 = 2
ary2 = 3
ary3 = 1
ary3 = 2
ary3 = 3
ary3 = 4
ary4 = 1
ary4 = 2
ary4 = 3
ary4 = 4
hash1 = e1 = 1
hash1 = e2 = 2
hash1 = e3 = 3
hash1 = e4 = 4
hash2 = e1 = 1
hash2 = e2 = 2
hash2 = e3 = 3
hash3 = e1 = 1
hash3 = e2 = 2
hash3 = e3 = 3
hash3 = e4 = 4
hash4 = e1 = 1
hash4 = e2 = 2
hash4 = e3 = 3
hash4 = e4 = 4

「Using a hash as a reference is deprecated」というのが気になるが、また後で調べよう。