2013-10-27 21 views
0

我試圖做一個類似於這個php函數的perl子程序。WriteOutput Perl?

private function writeOutput($msg, $type) { 
        echo date("H\:i\:s") . " - [$type] . > $msg\n"; 
      } 

我需要定義$msg$type一點幫助。

sub WriteOutput { 
    $sec = sprintf ("%02d", $sum%60); 
    $mins = sprintf("%02d", ($sum%3600)/60); 
    $hrs = int($sum/3600); 
    print "[$hrs:$mins:$sec]:[$type]>: $msg"; 
} 
+1

我很抱歉,但它是完全我不清楚你在問什麼。也許你可以嘗試以不同的方式表述它?謝謝。 –

+0

php函數的工作方式就像這樣'writeOutput(「test」,「type1」);'所以我想知道是否可以在perl中完成它 – user2524169

+0

知道perl的人不需要理解php。考慮獨立解釋問題。什麼是輸入,子程序有多少個參數? – jkshah

回答

2

讓我們來看看你的PHP子程序:

private function writeOutput($msg, $type) { 
    echo date("H\:i\:s") . " - [$type] . > $msg\n"; 
} 

首先,Perl不具有內置日期格式。相反,您必須使用模塊來處理日期。 另外,您在函數中使用了兩個參數,分別爲$msg$type。 Perl在函數調用中不使用函數參數。相反,您使用shift

use Time::Piece;  # A nice way to handle datetime. Included since Perl 5.10 
use feature qw(say); # Better than `print`. Included since Perl 5.10 

sub write_output { 
    my $msg  = shift; 
    my $type  = shift; 

    my $time = Time::Piece->new(localtime); 
    say $time->hms . " - [$type] . > $msg"; 
} 

shift命令是把你的函數的輸入標準的方式參數Time::Piece是Perl 5.10以來處理時間的標準Perl模塊。這是一個面向對象模塊的->與其他大多數語言的類似。 my $time = Time::Piece->new(localtime);根據當前時間創建一個新的Time::Piece對象。 $time->hms使用hms方法以HH:MM:SS格式打印出時間。

請注意使用my聲明和本地化變量(PHP並不具備的東西)。您應該始終在所有Perl程序上都有use strict;use warnings;。然後,您必須聲明所有變量與my

在Perl中注意,標準變量的使用方式是使用全部小寫字母和下劃線作爲分隔符。這取自Damian Conway的Perl Best Practices。您可能會也可能不會同意康威的所有編碼標準,但關於標準的好處之一就是每個人都使用它們,這使得與其他人的代碼一起工作得更好 - 無論您是否喜歡它們。

3

據我所知,你的問題是關於傳遞參數給Perl子程序。

Perl將傳遞給子例程的參數存儲在特殊變量@_中。在子程序的開頭添加以下行。

my ($msg, $type) = @_; 

並稱之爲子程序與

writeOutput("test", "type1"); 

BDW,我希望你不是想在這裏使用全局變量,因爲my丟失。

除此之外,目前還不清楚是什麼$sum

1

對於此函數在PHP中:

private function writeOutput($msg, $type) { 
    echo date("H\:i\:s") . " - [$type] . > $msg\n"; 
} 

Perl提供了做同一件事的可能性:

use POSIX qw(strftime); 

sub WriteOutput { 
    my($msg, $type) = @_; 
    my $date = strftime("[%H:%M:%S]", localtime); 
    print "$date:[$type]>: $msg"; 
} 

WriteOutput "Ok", "Not OK?"; 

給出:

[19:12:01][Not Ok?]>: Ok