当我实现下面的代码时,我得到了正确的日期:
10/05/2008 10/05/2009
当我使用printf而不是sprintf时,我得到以下内容:
10/05/200910/05/20081 1
关于为什么printf打印尾随1的任何想法?
#!/usr/bin/perl use strict; use warnings; my ($from_date,$to_date) = to_from_dates(); print "$from_date\n"; print "$to_date\n"; sub to_from_dates { my ($day,$month,$year) = (localtime)[3,4,5]; my $to_date = sprintf "%02d/%02d/%04d",$month+1,$day,$year+1900; my $from_date = sprintf "%02d/%02d/%04d",$year+1899; return ($from_date,$to_date); }
解决方法
仅
sprintf
返回可打印值.
printf
打印该值并返回1以告诉您输出成功.
如果您只是从调用开头擦除s-es,那么您显示的输出就是我期望的输出.
sub to_from_dates { my ($day,5]; my $to_date=printf("%02d/%02d/%04d",$year+1900); # printed: 10/05/2009 (no carriage return) # $to_date = '1'; my $from_date=printf("%02d/%02d/%04d",$year+1899); # printed: 10/05/2008 (no carriage return) # $from_date = '1'; return ($from_date,$to_date); } ($from_date,$to_date)=to_from_dates(); # returns ( 1,1 ) # output: 10/05/200910/05/2008 print $from_date."\n"; # prints "1\n"; <- first line Feed # output: 10/05/200910/05/20081\n print $to_date."\n"; # prints "1\n"; <- second line Feed. # output: 10/05/200910/05/20081\n1\n