• ベストアンサー

サブルーチン

サブルーチンを使い、文字列で時間を入力し秒に変えるのをやりたいのですが、どうにもうまくいきません。 表示結果の例としては 0h20m15s=1215 もしこれ以外の形式なら 12m12m12m=notaime っていうぐあいに作りたいのですが、教えてください。 あと、ハッシュで同じ文字列のキーの数を数えたいのですが教えてください。 ('a',20,'b',30,'a',40); a:2 b:1 という感じです。 おねがいします

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

  • ベストアンサー
  • sample_
  • ベストアンサー率76% (20/26)
回答No.2

use strict; use warnings; my $time = <STDIN>; chomp $time; if($time =~ /^(\d+)h(\d+)m(\d+)s$/){ print "$time=", $1 * 3600 + $2 * 60 + $3, "\n"; }else{ print "$time=no time\n"; } 前者は、こんな感じで 後者についてですが、ハッシュ自体値は重複できても、キーは重複できません。ということで、ハッシュに格納した時点で質問が成立しなくなるので、 上記リストをハッシュに格納する前に キーにあたる部分がいくつ重複しているか知りたい ということならば下記のようにすると調べられます。 use strict; use warnings; my @array = ('a',20,'b',30,'a',40); my %count; for(my $i=0; $i<@array; $i++){ if($i % 2 == 0){ $count{$array[$i]}++; } } foreach my $key (sort keys %count){ print "$key:$count{$key}\n"; }

その他の回答 (1)

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.1

前者に対しては /^(\d+)h(\d+)m(\d+)s$/ にマッチさせれば簡単ではないかな. 後者は無理. ハッシュがどのようなものか理解できてますか?