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]という書式はどういうことが行われているのか教えてください。よろしくお願いします。
No.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];
で十分。
print qw(abc def ghi)[2]; #ghiが表示される
↑この用な記述もできるんですね。知りませんでした。
ということですっきり理解できました!ありがとうございます!
No.1
- 回答日時:
qwは配列の定義です。
後に続く[]内の値がそれぞれ0~6の場合にSun Mon Tue Wed Thu Fri Sat を返します。
参考URL:http://rfs.jp/sb/perl/02/04.html
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- CGI perlで書いたcgiでsqliteの使い方を教えてください 2 2023/05/08 21:29
- 数学 ダミー変数での相関係数の算出にやり方(疫学の分析手法について) 14 2023/03/17 11:46
- 英語 Thursday(木曜日)の略し方 6 2023/02/07 07:24
- Excel(エクセル) エクセルのオートフィルが英語でしか機能しない 1 2022/06/02 22:43
- Windows 10 バッチファイルの記述法とルールについてアドバイスをお願いいたします。 1 2022/04/13 10:50
- C言語・C++・C# sprintf()の使い方について 1 2022/08/17 16:16
- Excel(エクセル) ¥マークを含むパスの処理について(マクロ、または関数) 2 2022/12/25 02:11
- Perl perl このテキストファイルを簡単に配列に入れるには? 2 2022/04/27 20:24
- SQL Server ACCESSで3ファイルを結合して、表を作成するやり方を教えて下さい。 17 2022/08/15 20:34
- フランス語 下記のフランス語の英訳は文法的に合っていますか? J’ai donné à mon père le 1 2023/06/25 19:21
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
クラスに配列を渡す方法
-
エクセルVBAでTransposeの不思議
-
マクロ Publicでの配列定義
-
チェックボックスのperlでの値...
-
二次元配列における要素数のは...
-
Strawberry Perl for Windows ...
-
リストボックスに縦スクロール...
-
perlで配列の要素が空なのを知...
-
VBAのautofilter、criteriaの配...
-
VBA 二次元配列の1つ目を増...
-
DBIを使ってSelect文 複数のカ...
-
フローチャートを教えてください
-
perl 配列の要素数について
-
MATLABの関数で配列の要素を返...
-
Python IndexError:list index ...
-
perl qw(aaa bbb ccc)[$hoge]...
-
一致する要素が格納されている...
-
VBでカンマで区切られた、要素...
-
Perlで<select multiple>の複数...
-
ファイル名に日付・時刻を付与...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBAのautofilter、criteriaの配...
-
Strawberry Perl for Windows ...
-
リストボックスに縦スクロール...
-
二次元配列のインデックスについて
-
文字の整列(printf)
-
エクセルVBAでTransposeの不思議
-
クラスに配列を渡す方法
-
二次元配列における要素数のは...
-
Excel VBA ユーザーフォームの...
-
perlで配列の要素が空なのを知...
-
perlで2次元配列をサブルーチ...
-
マクロ Publicでの配列定義
-
Dim flag(4) as boolean で配列...
-
参照配列の要素数の求め方は?
-
チェックボックスのperlでの値...
-
VB6で配列の最大値を簡単に求め...
-
jcode->jfold で禁則処理
-
DataGridViewに配列の値を表示...
-
VBScript 配列
-
配列を使わずに、数字(連番)...
おすすめ情報