質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Perl

Perlは多目的に使用される実用性が高い動的プログラミング言語のひとつです。

Q&A

解決済

1回答

913閲覧

特定の条件に一致する日付が入ったハッシュのリファレンスを返すサブルーチンの書き方がわからない。

fff.claypool

総合スコア12

Perl

Perlは多目的に使用される実用性が高い動的プログラミング言語のひとつです。

0グッド

0クリップ

投稿2018/06/30 08:34

計8ヶ月間の年月(yyyymm形式)を取得して、201806より大きい値が格納されているハッシュのリファレンスを戻り値として得たいと考えています。

下記のようなコードの書き方だと、"201806"を戻り値として返すだけで、条件に一致する値が複数入った変数を返すことができません。

Perl

1sub get_yyyymm { 2 my ($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst) = localtime(time); 3 4 my $last_6month = sprintf("%04d%02d", $year + 1900, $mon - 5); 5 my $last_5month = sprintf("%04d%02d", $year + 1900, $mon - 4); 6 my $last_4month = sprintf("%04d%02d", $year + 1900, $mon - 3 ); 7 my $last_3month = sprintf("%04d%02d", $year + 1900, $mon - 2); 8 my $last_2month = sprintf("%04d%02d", $year + 1900, $mon - 1); 9 my $last_1month = sprintf("%04d%02d", $year + 1900, $mon ); 10 my $this_month = sprintf("%04d%02d", $year + 1900, $mon + 1); 11 my $after_1month = sprintf("%04d%02d", $year + 1900, $mon + 2) 12 13 my @diary_list = ( $last_6month, $last_5month, $last_4month, $last_3month, $last_2month, $last_1month, $this_month, $after_1month); 14 foreach my $month_phr (@diary_list) { 15 if ($month_phr >= '201806'){ 16 my @month = $month_phr; 17 }; 18} 19}

どのような書き方をすれば、条件に一致する複数の変数を戻り値として返すことができるかご教示頂ければ幸いです。
よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

grepという関数を使えば配列から任意の条件に合致する要素を選び出すことができます。

perl

1my $r = [ grep {$_ ge '201806'} @diary_list ];

投稿2018/06/30 13:33

KojiDoi

総合スコア13671

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問