m_shige1979のときどきITブログ

プログラムの勉強をしながら学習したことや経験したことをぼそぼそと書いていきます

Github(変なおっさんの顔でるので気をつけてね)

https://github.com/mshige1979

Perl学習(配列、ハッシュとリファレンス)

配列とハッシュ、リファレンス

「@」で使用する場合と「$」で使用する場合とかリファレンスとかなんかよくわからないので再度復習がてら

配列

ソース
#!/usr/bin/env perl

#
use strict;
use warnings;

use Data::Dumper;

# 配列変数として定義
my @aaa;

# $変数名でアクセス
$aaa[0] = "zzzzzz";
$aaa[2] = 21220;

# $変数名でアクセス
print $aaa[0] . "\n";
print $aaa[2] . "\n";
print "\n";

# スカラー変数にリファレンスとして定義
my $bbb = [];

# -> で要素を指定?なんか変…
$bbb->[0] = "zzzzzzzzzz";
$bbb->[2] = "test";

# アクセスもこういうふうになる
print $bbb->[0] . "\n";
print $bbb->[2] . "\n";
print "\n";

# 初期設定で設定済み
my @ccc = (100, 200, 300);

print $ccc[0] . "\n";

# 初期設定で設定済み
my $ddd = [500, 600, 700];

print $ddd->[0] . "\n";
実行結果
[root@localhost ~]# perl bbbb.pl
zzzzzz
21220

zzzzzzzzzz
test

100
500
[root@localhost ~]#

うーん、「->」が付くのはちょっと嫌な感じ「@」で定義しているのに要素へアクセスする場合は「$」へアクセスするのがつまりどころかな

ハッシュ

ソース
#!/usr/bin/env perl

#
use strict;
use warnings;

use Data::Dumper;

# ハッシュ変数として定義
my %aaa;

$aaa{hoge1} = "111";
$aaa{hoge2} = 20;

print $aaa{"hoge1"} . "\n";
print $aaa{"hoge2"} . "\n";
print "\n";

# ハッシュリファレンスに設定
my $bbb = {};

$bbb->{foo1} = 200;
$bbb->{foo2} = "aaaaa";

print $bbb->{foo1} . "\n";
print $bbb->{foo2} . "\n";
print "\n";

# ハッシュ配列に初期設定
my %ccc = (
        aaaa1 => 300,
        aaaa2 => "aaaaaa",
        aaaa3 => "hoge"
);

print $ccc{aaaa1} . "\n";
print $ccc{aaaa2} . "\n";
print $ccc{aaaa3} . "\n";
print "\n";

# ハッシュリファレンスに初期設定
my $ddd = {
        bbbb1 => "xxxxxxx",
        bbbb2 => 300,
        bbbb3 => 5555
};

print $ddd->{bbbb1} . "\n";
print $ddd->{bbbb2} . "\n";
print $ddd->{bbbb3} . "\n";
print "\n";
結果
[root@localhost ~]# perl aaaa.pl
111
20

200
aaaaa

300
aaaaaa
hoge

xxxxxxx
300
5555

[root@localhost ~]#

「%」、「$」でアクセスが変わるのは配列と同じ…
配列と異なりアクセスはちょっと違和感ないけどこの「->」のありなしの違いを理解しておかないとはまりやすいので気をつけないといけない

配列にハッシュをリファレンス

ソース
#!/usr/bin/env perl

#
use strict;
use warnings;

use Data::Dumper;

# 配列
my @list;

# ハッシュのデータをリファレンスで配列に格納
my %aaa1 = (
        aaa => 100,
        bbb => 200,
        ccc => 50
);
my %aaa2 = (
        aaa => 220,
        bbb => 450,
        ccc => 150
);
my %aaa3 = (
        aaa => 120,
        bbb => 240,
        ccc => 500
);

# 配列を追加
push(@list, \%aaa1);
push(@list, \%aaa2);
push(@list, \%aaa3);

for my $item (@list){
        print $item->{aaa} . "-" . $item->{ccc} . "-" . $item->{ccc} . "\n";
}
実行結果
[root@localhost ~]# perl cccc.pl
100-50-50
220-150-150
120-500-500
[root@localhost ~]#

まだ他にもあるけど

mapとかgrepとかsortとかあるけどもう少し学習し直す必要がありそう。
配列とハッシュを組み合わせて複数キーを使用したソートとかにも利用できそうなのでもう少し勉強する。

なんかもうすぐ来るかも

Webアプリエンジニア養成読本[しくみ、開発、環境構築・運用…全体像を最新知識で最初から! ] (Software Design plus)

Webアプリエンジニア養成読本[しくみ、開発、環境構築・運用…全体像を最新知識で最初から! ] (Software Design plus)

言語のうんぬんはともかく運用方法などは素人なんで参考にできるかも…