誰かが(可能であれば)次のコードを改善するための提案があったのだろうかと思っていたのですが、それは繰り返し(my @a = $ time =〜...)、case/switchまたはgiven /いつ私が行方不明になっているか他のアイデア?このPerlの振る舞いは、スイッチ/ケース、または指定された/ whenでエミュレートできますか?
my $time = '12:59pm';
if(my @a = $time =~ m/^(\d\d?)(am|pm)$/) { tell_time($a[0], 0, $a[1]) }
if(my @a = $time =~ m/^(\d\d?):(\d\d)(am|pm)$/) { tell_time(@a) }
if(my @a = $time =~ m/^(\d\d?):(\d\d)$/) { tell_time(@a) }
sub tell_time
{
my $hour = shift;
my $minute = shift || '00';
my $ampm = shift || ($hour > 12) ? 'pm' : 'am';
print "Hour: $hour, Minute: $minute, AMPM: $ampm\n";
}
私はスイッチで遊んで試してみたと5.10のとき/与えられたが、ような何かを行うことができるように見えることはできません。
@_が表示されますので、飛べないんgiven($time)
{
when(/^(\d\d?)(am|pm)$/) { tell_time($_[0], 0, $_[1]) }
when(/^(\d\d?):(\d\d)(am|pm)$/) { tell_time(@_) }
when(/^(\d\d?):(\d\d)$/) { tell_time(@_) }
}
$時間を保存すること。
また、私はコードが解決する問題よりも、この問題の構文に興味があります。 Time/ParseDateを使用して、時間や日付のような書式設定された文字列のさまざまな部分を把握できることをよく知っています。
感謝。私はまず、Switch.pmで正確にそれを試してみましたが、うまく動作しませんでした。 関数をさらに改善するという点では、実際の例は実際にはPragmatic Programmerのコードサンプルを書き直したものであり、そのコンセプトは私には興味がありましたが、特にコード実装が好きではありませんでした。 ご協力いただきありがとうございます。 – stevecomrie