Perl

Perl(メモ) コンテキスト リファレンス デリファレンス

More than 1 year has passed since last update.

参考


use strict;
use warnings;

# コンテキスト(代表的ハマりポイント!!!!)
my @hoge = (3, 0, 1, 2);

my ($ans) = @hoge;
print $ans."\n"; #3 配列へ代入すると0番目のみ代入される

my $ans2 = @hoge;
print $ans2."\n"; #4 配列はスカラコンテキストでで評価すると長さが返される。

print $#hoge."\n"; #4 末尾の添字が表示されます 

## 配列の操作
#my @array = ('a', 'b', 'c', 'd');


#### 記号の使い方!!!!!


### リファレンスの取得作成(配列)
my @x = (1, 2, 3);
my $ref_x1 = \@x;

# 略記
my @ref_x2 = [1, 2, 3];
my $ref_x3 = [@x];



### デリファレンス(配列)
my $ref_x = [1, 2, 3];
print $ref_x->[0]."\n";
my @new_x = @$ref_x; # 記号に注意!!!
#print @new_x->[0]."\n"; Can't use an array as a reference at main.pl
print $new_x[0]."\n";

### リファレンスの取得/作成 (ハッシュ)

my %y = (
    perl => 'larry',
    ruby => 'matz',
    );
my $ref_y1 = \%y;

# 略記
my $ref_y2 = {
    perl => 'larry',
    ruby => 'matz',
};

### デリファレンス(ハッシュ)
my $ref_y = {
    perl => 'larry',
    ruby => 'matz',
};

print $ref_y->{perl}."\n"; # larry

my %new_f = %$ref_y;

print $new_f{perl}."\n"; #larry


## リファレンス/デリファレンスを扱う上で...

# 悪い例
my @foo = (1, 2, 3);
my %foo = (a => 1, b => 2, c => 3);
# $foo[1], $foo{a}
# 同じ変数を参照しているように見えるが、実際は違う変数です
## なので!! 基本的にリファrンス以外使わない(ハマりにくい)


# 必要な時だけデリファレンスする
my $list = [1, 2, 3];
push @$list, 10;

print $list->[3]."\n"; # 10