为什么在Perl的printf输出后得到一个尾随’1’?

前端之家收集整理的这篇文章主要介绍了为什么在Perl的printf输出后得到一个尾随’1’?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
当我实现下面的代码时,我得到了正确的日期:

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

猜你在找的Perl相关文章