dポイントプレゼントキャンペーン実施中!

my($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst) = localtime(time);
$wday = sprintf("%s", qw(Sun Mon Tue Wed Thu Fri Sat)[$wday]);

2行目のsprintfですが、qw(Sun Mon Tue Wed Thu Fri Sat)[$wday]はどのようなことが行われているのでしょうか?
sprintf("%s", "hello world!");みたいな基本的なものならsprintfの使い方はわかります。ですが、qw(aaa bbb ccc)[$hoge]のような記述についてがわかりません。
上記の例でいえば、どういう結果になるのかはわかるのですが、どういう過程で代入されているのかがわかりません。

qw(Sun Mon Tue Wed Thu Fri Sat)[$wday]という書式はどういうことが行われているのか教えてください。よろしくお願いします。

A 回答 (2件)

> my @weekname = ( "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat");


> $wday = sprintf("%s", $weekname[$wday]);

ならわかりますか?

0~6の7要素の配列 @weekname を使うことで、数字から曜日名への変換をしてます。

この配列変数の代入は、qw 演算子を使うと、

> my @weekname = qw(Sun Mon Tue Wed Thu Fri Sat);
> $wday = sprintf("%s", $weekname[$wday]);

と書けます。
(qw演算子を使えば、文字列配列を簡潔に書けるようになります。結果は同じ)

さらに、@weekname という配列変数を作ってますが、一度きりしか使ってないのに変数を作るのは無駄なので、
> $wday = sprintf("%s", $weekname[$wday]);
このweename部分に@weeknameの中身である、qw(Sun Mon …) を入れてしまえば、
> $wday = sprintf("%s", qw(Sun Mon Tue Wed Thu Fri Sat)[$wday]);
になります。

でも、これって、ちょっと無駄な表現ですね。
「sprintf("%s",○○)」って、元の「○○」と同じ(何もしてない)ので、
> $wday = qw(Sun Mon Tue Wed Thu Fri Sat)[$wday];
で十分。
    • good
    • 0
この回答へのお礼

print qw(abc def ghi)[2];  #ghiが表示される
↑この用な記述もできるんですね。知りませんでした。

ということですっきり理解できました!ありがとうございます!

お礼日時:2010/04/05 14:32

qwは配列の定義です。


後に続く[]内の値がそれぞれ0~6の場合にSun Mon Tue Wed Thu Fri Sat を返します。

参考URL:http://rfs.jp/sb/perl/02/04.html
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!