![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?8acaa2e)
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ランキング
-
perlで配列の要素が空なのを知...
-
csv形式のデータの一部を削除し...
-
Excel(VBA)で配列の要素数を...
-
二次元配列における要素数のは...
-
文字の整列(printf)
-
Processing言語 listの配列数
-
VBAのautofilter、criteriaの配...
-
マクロ Publicでの配列定義
-
画面を強制的に再描画させる方法
-
Can't use string ("0") as an ...
-
csh foreachで「*」でエラ...
-
GIFアニメをループさせたくない
-
UWSCの終了の仕方
-
多重ループの抜けだし方
-
アセンブラによるウェイト(WAIT...
-
VBのReturnの使い方
-
フラグについて
-
DOSコマンドのループ内のTIMEコ...
-
ボタンが押された時にループか...
-
CSVファイルの特定の行だけを読...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Dim flag(4) as boolean で配列...
-
VBAのautofilter、criteriaの配...
-
二次元配列のインデックスについて
-
二次元配列における要素数のは...
-
エクセルVBAでTransposeの不思議
-
クラスに配列を渡す方法
-
リストボックスに縦スクロール...
-
マクロ Publicでの配列定義
-
Excel VBA ユーザーフォームの...
-
文字の整列(printf)
-
perl 配列の要素数について
-
perlで配列の要素が空なのを知...
-
Strawberry Perl for Windows ...
-
VBA 二次元配列の1つ目を増...
-
チェックボックスのperlでの値...
-
perl 初等プログラミングについて
-
DBIを使ってSelect文 複数のカ...
-
複数のキーで配列をソートする...
-
newで個別に生成した配列にNULL...
-
Excel(VBA)で配列の要素数を...
おすすめ情報