2010-04-07 18 views
23

Geçerli saati almak için aşağıdaki ifadeleri kullandım.Zaman damgasını almak için Perl'in yerel baskısını baskıyla nasıl kullanırım?

print "$query executed successfully at ",localtime; 
    print "$query executed successfully at ",(localtime); 
    print "$query executed successfully at ".(localtime); 

ilk iki ifade, bir tarih biçiminde geçerli saat baskı değildir

executed successfully at 355516731103960 
executed successfully at 355516731103960 
executed successfully at Wed Apr 7 16:55:35 2010 

Çıktı. Üçüncü ifade sadece doğru formatı bir tarih formatında veriyor.

Anlayışım, skaler bağlamda bir değer döndüren ilk terimdir, bu nedenle sayıları döndürüyor.

Daha sonra ikinci baskıda, yalnızca liste bağlamında yerel modeli kullandım, neden aynı zamanda sayı çıkışı veriyor.

cevap

30

Belki bağlam sen Perl programlama için öğrenebileceği en önemli şeydir. Birçok yerleşik alt yordam ve işleç, içeriğe bağlı olarak farklı davranır.

print "$query executed successfully at ", localtime, "\n"; # list context 
print "$query executed successfully at ",(localtime),"\n"; # list context 
print "$query executed successfully at ". localtime, "\n"; # scalar context 
print "$query executed successfully at ".(localtime),"\n"; # scalar context 

print "$query executed successfully at ", scalar localtime, "\n"; # scalar context 
print "$query executed successfully at ", scalar (localtime),"\n"; # scalar context 

Bu

ifadeleri yukarı bölerek daha net hale getirilebilir.

my $time = localtime; # scalar context 
print "$query executed successfully at $time\n"; 

my @time = localtime; # list context 
print "$query executed successfully at @time\n"; 
7

scalar kuvvetler sayıl bağlam: Sadece arka arkaya sayılar bir çıktısını alıyoruz böylece İkinci örnekte

print scalar localtime(); 

, açıkça bir liste bağlam var. Örneğin,

'u deneyin ve bir iki nokta ile birleştirilen sayıları görürsünüz.

4

Hem birinci hem de ikinci, listedeki değerleri döndürür, ancak muhtemelen beklediğiniz gibi değildir. Parentlerin localtime etrafında kullanımı sadece yararlı bir şey yapmayacaktır. Ama ayrı ayrı Üretilen bu liste öğelerini almak için aşağıdaki kodu kullanabilirsiniz:

@list = ($sec,$min,$hour,$day,$mon,$year_1900,$wday,$yday,$isdst)=localtime; 
print join("\n",@list); 
10

localtime dönüş değeri bağlamında bağlıdır.

my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime; 
my $now_string = localtime; # e.g., "Thu Oct 13 04:54:34 1994" 

Şimdi print onun bağımsız değişkenler için liste bağlam sağlar: skaler bağlamda bir ctime(3) değer iken liste bağlamda, 9 eleman listesidir. Bu nedenle, print localtime numaralar listeden çıktılar (varsayılan olarak herhangi bir ayırıcı olmadan). (Lütfen 3 açıklamada gibi) . birleştirme operatörü kullanarak veya scalar kullanılarak localtime üzerinde skaler bağlamını zorlayabilirsiniz:

print "".localtime; 
print scalar localtime; 
0

size sadece fonksiyon zamanı() kullanabilir şimdiki zaman, zaman damgası almak istiyorsanız

İlgili konular