Created
October 8, 2012 01:21
-
-
Save sakadonohito/3850245 to your computer and use it in GitHub Desktop.
Arguments and Reference
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/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