0

この php 関数に似た 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";
}
4

3 に答える 3

2

PHP サブルーチンを見てみましょう。

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

まず、Perl には組み込みの日付フォーマッタがありません。代わりに、モジュールを使用して日付を処理する必要があります。$msgまた、関数でとという 2 つのパラメーターを使用しています$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->hmshmsHH:MM:SS

変数を宣言してローカライズする whichの使用に注意してくださいmy(PHP には実際にはありません)。すべての Perl プログラムで常にuse strict;andを使用する必要があります。use warnings;次に、すべての変数を で宣言するmy必要があります。

Perl では、変数の標準的な方法は、すべて小文字を使用し、区切り記号としてアンダースコアを使用することです。これは、Damian Conway によるPerl Best Practicesからの引用です。Conway のコーディング標準のすべてに同意するかもしれないし、同意しないかもしれませんが、標準の良いところの 1 つは、誰もが標準を使用しているため、好きかどうかに関係なく、他の人のコードとの連携が非常に快適になることです。

于 2013-10-27T18:01:12.413 に答える
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
于 2013-10-27T18:13:01.210 に答える