如何使用Perl的本地时间和打印来获取时间戳?

kir*_*ika 23 perl built-in

我使用以下语句来获取当前时间.

  print "$query executed successfully at ",localtime;
  print "$query executed successfully at ",(localtime);
  print "$query executed successfully at ".(localtime);
Run Code Online (Sandbox Code Playgroud)

产量

 executed successfully at 355516731103960
 executed successfully at 355516731103960
 executed successfully at Wed Apr  7 16:55:35 2010
Run Code Online (Sandbox Code Playgroud)

前两个语句不以日期格式打印当前时间.第三个语句仅以日期格式提供正确的输出.

我的理解是第一个在标量上下文中返回一个值,所以它返回数字.

然后在第二个打印中我只在列表上下文中使用了localtime,为什么它也给出了数字输出.

Bra*_*ert 31

也许你可以在Perl编程中学到的最重要的事情是上下文.许多内置子例程和运算符的行为取决于上下文.

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
Run Code Online (Sandbox Code Playgroud)

通过拆分语句可以使这更清楚.

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

my @time = localtime; # list context
print "$query executed successfully at @time\n";
Run Code Online (Sandbox Code Playgroud)


Eug*_*ash 10

返回值localtime取决于上下文.在列表上下文中,它是一个9元素的列表,而在标量上下文中,它是一个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"
Run Code Online (Sandbox Code Playgroud)

现在,print为其参数提供列表上下文.这就是为什么print localtime输出列表中的数字(默认情况下没有任何分隔符).您可以localtime使用.连接运算符(如第3个语句中)或使用scalar以下命令强制标量上下文:

print "".localtime;
print scalar localtime;
Run Code Online (Sandbox Code Playgroud)


小智 7

标量力量标量上下文:

print scalar localtime ();
Run Code Online (Sandbox Code Playgroud)

在第二个例子中,它显然是一个列表上下文,所以你只是连续打印出数字.例如,试试

 print join (":", (localtime));
Run Code Online (Sandbox Code Playgroud)

你会看到用冒号连接的数字.