こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

配列を引数とするサブルーチンに関する質問

配列を引数とするサブルーチンに関する質問です。
Trimと Hex2Decのサブルーチンをインターネットを参考に作りました。

下記のスクリプトは
> perl test.pl
で期待通りに動きます。

質問は、サブルーチンの中における、
for (@out) {
$_=hex;
}
です。

trimの方では、$_がなくても、きちんと動きます。(あってもOK、$_=~s/^\s+//; $_=~s/\s+$//;)
Hex2Decの方は、$_=hex; でないと動きません。

これは、for (@out) { }でひとつずつ処理する対象が、$_に入っている。
処理結果の格納先が、s/^\s+//; の場合は、記述無き時は、 $_と暗黙できまっているのに対し、
hex;の場合は、そうではない。明示的に与えてやらなければいけない。
こういう理解で、良いでしょうか?

他に、やりようはあるのでしょうか?
宜しくお願いいたします。


test.pl -----------------------------------------
$a=10,print "Hex=".$a." --> Dec=".&Hex2Dec($a)."\n";
$a=20,print "Hex=".$a." --> Dec=".&Hex2Dec($a)."\n";

@a=('a','b','c','d');
@b=&Hex2Dec(@a);
print "Hex=@a --> Dec=@b\n";

$a=' a ',print "org=$a --> trimed =".&trim($a)."xxxxx\n";
$a=' b ',print "org=$a --> trimed =".&trim($a)."xxxxx\n";
@a=(' a ',' a ',' a ',' a ');
@b=&trim(@a);
print "org=@a --> trimed= @b\n";

sub trim {
my @out = @_;
for (@out) {
s/^\s+//;
s/\s+$//;
}
return wantarray ? @out : $out[0];
}


sub Hex2Dec {
my @out = @_;
for (@out) {
$_=hex;
}
return wantarray ? @out : $out[0];
}
------------------------------------------------

投稿日時 - 2008-01-14 19:44:04

QNo.3680008

困ってます

質問者が選んだベストアンサー

hex は 16進数を10進数に変換した値を返します。
つまり、引数の値に変化はありませんので、
結果を受け取る必要があります。

$_ = hex は、引数の値として、$_ が使われています。
$_ = hex($_) ということになりますね。
混乱するうちは、できるだけ省略をしないことをお奨めします。

投稿日時 - 2008-01-14 22:51:02

お礼

tamahiro22さん、ありがとうございます。
なかなか、慣れないですが、覚えてしまいます。
ありがとうございます。

投稿日時 - 2008-01-15 23:27:45

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(1)

あなたにオススメの質問