2010-04-07 39 views
23

Tôi đã sử dụng các câu sau để có được thời gian hiện tại.Làm cách nào để sử dụng thời gian địa phương của Perl với bản in để nhận dấu thời gian?

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

Output

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

Hai câu đầu tiên không in thời gian hiện tại trong một định dạng ngày tháng. Tuyên bố thứ ba chỉ đưa ra kết quả chính xác theo định dạng ngày.

Sự hiểu biết của tôi là cái đầu tiên trả về giá trị trong ngữ cảnh vô hướng, vì vậy nó sẽ trả về số.

Sau đó, trong lần in thứ hai, tôi chỉ sử dụng giờ địa phương trong ngữ cảnh danh sách, tại sao nó cũng cho đầu ra số.

Trả lời

30

Có lẽ điều quan trọng nhất bạn có thể học để lập trình trong Perl, là bối cảnh. Nhiều chương trình con được xây dựng sẵn và các toán tử, hoạt động khác nhau tùy thuộc vào ngữ cảnh.

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 

Điều này có thể được làm rõ hơn bằng cách chia tách các câu lệnh.

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 lực lượng vô hướng ngữ cảnh:

print scalar localtime(); 

Trong ví dụ thứ hai, nó rõ ràng là một bối cảnh danh sách vì vậy bạn chỉ nhận được một bản in của các số trong một hàng. Ví dụ: hãy thử

print join (":", (localtime)); 

và bạn sẽ thấy các số được nối với dấu hai chấm.

4

Cả hai giá trị trả về thứ nhất và thứ hai trong ngữ cảnh danh sách nhưng chúng có thể không phải là những gì bạn mong đợi. Việc sử dụng các parens quanh localtime đơn giản là sẽ không làm bất cứ điều gì hữu ích. Nhưng bạn có thể sử dụng đoạn mã sau để có được những mục danh sách trả về cách riêng biệt:

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

Giá trị trả về của localtime phụ thuộc vào ngữ cảnh. Trong danh sách bối cảnh đó là một danh sách 9 phần tử, trong khi trong bối cảnh vô hướng đó là một giá trị ctime(3):

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

Bây giờ, print cung cấp danh sách bối cảnh cho các đối số của nó. Đó là lý do tại sao print localtime xuất các số từ danh sách (không có dấu phân cách theo mặc định). Bạn có thể buộc bối cảnh vô hướng trên localtime bằng cách sử dụng các nhà điều hành . nối (như trong bản Tuyên Bố 3 của bạn) hoặc sử dụng scalar:

print "".localtime; 
print scalar localtime; 
0

Nếu bạn muốn để có được những dấu thời gian của thời điểm hiện tại, bạn chỉ có thể sử dụng thời gian function()

Các vấn đề liên quan