Beefy Boxes and Bandwidth Generously Provided by pair Networks
There's more than one way to do things
 
PerlMonks  

syntax in the sub

by steph_bow (Pilgrim)
on Apr 29, 2008 at 14:02 UTC ( [id://683472]=perlquestion: print w/replies, xml ) Need Help??

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.

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: perlquestion [id://683472]
Approved by Corion
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others studying the Monastery: (6)
As of 2024-04-23 16:56 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found