in reply to create file with current date for name

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.

#!/usr/bin/perl -w use strict; my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(t +ime); 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

You can simplify and use the default behaviour for localtime and an array slice to give this:

#!/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";