steph_bow has asked for the wisdom of the Perl Monks concerning the following question:

Dear Monks,

This is a trivial test but I would like to know if you advise to use different names in the sub from the ones used in the main part of the script. Here I have used $day in the main part and $date in the sub.Thanks a lot !

Here is my code

#! usr/bin/perl -w use strict; # la librairie appelée sert à utiliser les fonctions move et copy use File::Copy; use warnings; use File::Find; use diagnostics; BEGIN { open(STDERR, ">stderr.log") or die "Failed to open log file"; } sub general_per_day_process{ my $date = shift @_; print STDOUT "the date is $date\n"; } my @ALL_WEEK_DAYS = (20061022, 20061023); ################# selection of the week ############################ my $day; foreach $day(@ALL_WEEK_DAYS){ print STDOUT "the day is $day\n"; } foreach $day(@ALL_WEEK_DAYS){ general_per_day_process($day); } close STDERR;

Replies are listed 'Best First'.
Re: syntax in the sub
by Narveson (Chaplain) on Apr 29, 2008 at 14:16 UTC

    No, I do not advise using different names in the sub from the ones used in the main part of the script. The whole point of lexically scoped names is that a name in one scope does not interfere with a name in a different scope. The programmer can stop worrying about where else a name may have been used, because it doesn't matter.

    A note about scope

    Instead of

    my $day; foreach $day(@ALL_WEEK_DAYS){ ... }

    you should declare your loop variable as part of the foreach statement:

    foreach my $day(@ALL_WEEK_DAYS) { ... }
Re: syntax in the sub
by jethro (Monsignor) on Apr 29, 2008 at 14:57 UTC
    As your example perfectly demonstrates, using different names can be quite misleading. Someone reading your script would probably expect to see 'Monday' or '1' in a variable called $day, whereas $date is the name that leads directly to the right idea.

    Descriptive variable names are a blessing. Make the most of it.