in reply to Delete files with Perl in Windows

Not related to your question, but do you really mean &PrintForm?

Calling a subroutine with the leading & and no arguments passes the calling sub's argument list. Since Perl passes sub arguments by reference, this can lead to some spooky action at a distance that can be very hard to debug. See perlsub for more details.

Consider this code:

my $critical_data = 'Original Value'; print "Begin: $critical_data\n"; &SubOne($critical_data); print "End: $critical_data\n"; sub SubOne { print "\tSubOne Got: @_\n"; &SubTwo; } sub SubTwo { print "\tSubTwo Got: @_\n"; $_[0] = 'pwned!'; } __END__ Begin: Original Value SubOne Got: Original Value SubTwo Got: Original Value End: pwned!

Compare the result of this code:

my $critical_data = 'Original Value'; print "Begin: $critical_data\n"; SubOne($critical_data); print "End: $critical_data\n"; sub SubOne { print "\tSubOne Got: @_\n"; SubTwo(); } sub SubTwo { print "\tSubTwo Got: @_\n"; $_[0] = 'pwned!'; } __END__ Begin: Original Value SubOne Got: Original Value SubTwo Got: End: Original Value

Which would you rather debug?


TGI says moo