Skip to content

Instantly share code, notes, and snippets.

@sakadonohito
Created October 8, 2012 01:21
Show Gist options
  • Save sakadonohito/3850245 to your computer and use it in GitHub Desktop.
Save sakadonohito/3850245 to your computer and use it in GitHub Desktop.
Arguments and Reference
#!/usr/bin/perl
# -*- coding:utf-8 -*-
use strict;
use warnings;
use feature 'say';
use encoding 'utf-8';
sub responseScalar {
my $a = shift;
say "1:".$a;
}
sub responseArray{
#shiftで受けると引数配列の一つ目を受け取ったことになる→Scalar値
my @a = shift;
#Scalar値でリファレンスではないので空欄になる
say "2:".ref(@a);
say "3:"."@a";
}
sub responseArray2{
#引数の配列をまるまる配列変数に入れる
my @a = @_;
#リファレンス値ではないので空欄
say "2-2:".ref(@a);
#配列の中身が展開されて出力される
say "3-2:"."@a";
#変数をダブルクォーテーションで囲まない場合は要素数を出力
say "3-3:".@a;
}
sub responseRefArray{
#配列のリファレンスを受けている
my $a = shift;
#配列のリファレンスだからARRAYが返る
say "4:".ref($a);
#配列のリファレンス値を出力
say "5:".$a;
#デリファレンスした配列の中身が展開されて出力される
say "5-2:"."@$a";
#デリファレンスしても変数をダブルクォーテーションで囲まない場合は要素数を出力
say "5-3:".@$a;
}
sub responseHash{
#ハッシュはそのままでは受けれない
#key,value,key,valueてハッシュのデータになってるのに一部だけ取るんじゃねぇ。みたいなエラーが出る。
my %a = shift;
#空欄が出力される
say "6:".ref(%a);
#変数展開されない「%a」という文字が出力される
say "7:"."%a";
}
sub responseHash2{
#ハッシュはそのままでは受けれない。引数全て受け取っているのでエラーは出ない。
my %a = @_;
#空欄が出力される
say "6-2:".ref(%a);
#変数展開されない「%a」という文字が出力される
say "7-2:"."%a";
}
sub responseRefHash{
#ハッシュのリファレンスを受けている
my $a = shift;
#HASH
say "8:".ref($a);
#ハッシュのリファレンス値を出力
say "9:".$a;
#「%」+HASHリファレンス値という出力
say "8-2:"."%$a";
#「3/8」と出力される???
say "9-2:".%$a;
#どのみちハッシュの場合はそのまま出力することは出来ない?
#ハッシュ単独出力なら中身展開の出力ができる
say '9-3:print out next line.';
say %$a;
}
&responseScalar(10);
my @b = (10,20,30,40,50);
#そのまま渡す
&responseArray(@b);
&responseArray2(@b);
#リファレンスで渡す
&responseRefArray(\@b);
my %c = (
"tanaka" => "taro",
"suzuki" => "ichiro",
"saitou" => "takashi"
);
#そのまま渡す
&responseHash(%c);
&responseHash2(%c);
#リファレンスで渡す
&responseRefHash(\%c);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment