note
tachyon
<p>Your need sprintf not printf. This works as expected. The 1 is the true return value from printf which gets assigned to $ymd after printf has printed the string.
<code>
#!/usr/bin/perl -w
use strict;
my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time);
printf ("%04d%02d%02d",$year+1900,$mon+1,$mday);
print "\n\n";
# result is 20010807
# good; exactly what was expected
my $ymd = sprintf("%04d%02d%02d",$year+1900,$mon+1,$mday);
print "$ymd";
print "\n\n";
# result is 20010807
my $outfile = "$ymd.summary";
print "$outfile";
print "\n\n";
# result is 20010807.summary
</code>
<p>You can simplify and use the default behaviour for localtime and an array slice to give this:
<code>
#!/usr/bin/perl -w
use strict;
my ($mday,$mon,$year) = (localtime)[3..5];
my $ymd = sprintf("%04d%02d%02d",$year+1900,$mon+1,$mday);
my $outfile = "$ymd.summary";
print $outfile, "\n";
</code>
<p>cheers
<p><font color="#0000ff">tachyon</font>
<p>s&&rsenoyhcatreve&&&s&n.+t&"$'$`$\"$\&"&ee&&y&srve&&d&&print
102824
102824