首先,你必須捕捉到你的輸入:
my $time = "Fri 2013-06-14 0:59:15.3";
$time =~ /(\d+?):(\d+?):(.+)$/ #The time captured in three components
my $hours = $1;
my $minute = $2;
my $seconds = $3;
的regular expression描述要匹配你行的。 $
意味着將我的表情固定在行尾。 (..)
是捕獲組。這些捕獲了我的正則表達式中匹配的內容,並通過$1
,$2
和$3
變量使它們可用。
如果你從來沒有學過正則表達式,你應該。正則表達式非常強大,您應該在上面的鏈接中閱讀它們,或者嘗試使用Perldoc tutorial。
現在,我有不同的件我的時間來捕獲(並假設60秒分鐘60分鐘小時),我現在可以做我的計算:
my $time_in_seconds = ($hours * 3600) + ($minutes * 60) + $seconds;
my $time_in_minutes = $time_in_seconds/60;
司的計算機上具有測量精度的問題,因爲它是很難用基數2表示小數。因此,我寧願將其全部乘以,然後除以60.
一旦您有時間,您需要以您想要的格式打印出來。這就要求printf:
printf "%9.4f\n", $time_in_minutes;
的%9.4f
指定的格式。 f
表示這是一個浮點數(基本上是一個非整數)。 4
表示小數位數。 9
表示字段寬度,其中包含小數點,小數點另一邊的四個和負號。因此,這將允許高達-9999.999
的寬度,這已經足夠了。
把它放在一起....
#! /usr/bin/env perl
#
use warnings;
use strict;
use feature qw(say);
while (my $time = <DATA>) {
chomp $time;
$time =~ /(\d+?):(\d+?):(.+)$/; #The time captured in three components
my $hours = $1;
my $minutes = $2;
my $seconds = $3;
my $time_in_seconds = ($hours * 3600) + ($minutes * 60) + $seconds;
my $time_in_minutes = $time_in_seconds/60;
printf qq(%9.4f\n), $time_in_minutes;
}
__DATA__
Fri 2013-06-14 0:59:15.3
Sat 2013-06-15 1:01:30.6
Sun 2013-06-16 1:03:45.9
現在運行它:
$ ./test.pl
59.2550
61.5100
63.7650
看起來是正確的。
不是所有的分鐘都有60秒,所以你的答案可能會在你的方法中被秒掉。 – ikegami