Только sprintf
возвращает значение для печати. printf
печатает значение и возвращает 1
, чтобы сообщить вам, что вывод был успешным.
Вывод, который вы показываете, является именно тем выводом, который я ожидал бы, если бы вы просто стерли s
-ы с начала вызовов.
sub to_from_dates {
my ($day, $month, $year) = (localtime)[3,4,5];
my $to_date=printf("%02d/%02d/%04d", $month+1, $day, $year+1900);
# printed: 10/05/2009 (no carriage return)
# $to_date = '1';
my $from_date=printf("%02d/%02d/%04d", $month+1, $day, $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