matsuo’s blog

新米プログラマ?の備忘録

【Perl】リファレンス

リファレンスを作るには、$や@や%の前に"¥"『バックスラッシュ』をつけてあげる。
デリファレンスする時は、リファレンスの変数の前に
スカラーの場合は$、
配列の場合は@、
ハッシュの場合は%、
をつける。

下は、配列の中にハッシュを設定する、そしてそれを取得する時のやり方。
割とよく使っているかも。
fetchrow_hashrefで受け取ったリファレンスを、ごにょごにょしたりする時とかによく使っている。

#!bin/usr/perl                                                                                                  

use strict;

my %h1 = (dog => "犬",
          cat => "猫",
    );
my %h2 = (apple => "りんご",
          banana => "ばなな",
    );
my @a;
my $h1_ref; # h1(ハッシュ)のリファレンス                                                                        
my $h2_ref; # h2(ハッシュ)のリファレンス                                                                        

$h1_ref = \%h1;
$h2_ref = \%h2;

@a = ($h1_ref, $h2_ref);

print $a[0]->{dog}, "\n";
print $a[0]->{cat}, "\n";
print $a[1]->{apple}, "\n";
print $a[1]->{banana}, "\n";

$a[0]{dog}だと参照できないから注意。
$a[0]->{dog}ね。
慣れてない時は、頻繁になんでじゃーーーーーってなってた。


次は配列の中に配列を設定するやり方。
2次元配列ってやつ。
下は、正しそうで正しくないやり方。
ぱっと見あっている感じがするので、気をつけたい。

#!bin/usr/perl                                                                                                  

use strict;

my @a = qw(1 2 3 4 5);
my @b = qw(a b c d e);
my @parent = (@a, @b);

print "@parent\n"; # 1 2 3 4 5 a b c d e <- 絶賛1次元

正しくはこのようなする。

#!bin/usr/perl                                                                                                  

use strict;

my @a = qw(1 2 3 4 5);
my @b = qw(a b c d e);
my @parent = (\@a, \@b);

print "@parent\n"; # ARRAY(...) ARRAY(...)                                                                      
print "$parent[0][4]\n";    # 5                                                                                 
print "$parent[0]->[3]\n";  # 4                                                                                 
print "$parent[1][0]\n";    # a                                                                                 
print "$parent[1]->[2]\n";  # c    

$parent[0][0]と$parent[0]->[0]は、表現が違うけど同じ意味。


とりあえず、今日はこんなところで。
もう少し、いやもっと綺麗な日本語を書くように心がける。