LoginSignup
0
1

More than 5 years have passed since last update.

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

Last updated at Posted at 2017-10-25

参考



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
0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1