On Mon, 2008-10-27 at 17:05 +0000, Brian wrote:
> Hello
>
> Years ago I used to work with FORTRAN, RPG GAP 2 and a smidgeon of basic.
> Code was written one line at a time, the first section of code was Input
> data, the next section was calculations, the last section was output.
> (For example, in the sample of code below, the "while" line would have
> been written on one line instead of 3)
>
> Why is it "good practice" to write PERL the way it is done?
Much of what is good practise is simply historic; it was done that way
in the past, so it's done that way now. The rule for writing "good"
code is to design it as though a recently-graduated new-hire will be
maintaining it...because they will be. :)
> Why is it that some code has no curly braces after print; whilst in
> others I sometimes see one or more curly braces after it?
> Will there be a time when print; will fail because there isn't a curly
> brace following it, even though an equal number of left & right braces
> precede it?
> I appreciate I have the right to lay out my code in any way I see fit, I
> would just like to see the reasoning.
>
> An example of something confusing me is in the sample below
> find sub {
> return unless -f;
> open my $FH, '<', $_ or die "Cannot open '$_' $!";
> while ( <$FH> ) {
> /\Q$string/ && print $REPORT "$File::Find::name\n" and
> return;
> }}, '/test';
>
> Why isn't the last line
> }, '/test';}
This code is written this way because the coder has been playing too
much Perl Golf ;) The objective of Perl Golf is to write a program to
do a simple task in the least number of characters possible. This, of
course, makes it harder to read.
Another way to write the above:
# wanted -- a sub for File::Find::find()
#
# $_ contains the basename of the file
#
# $File::Find::name contains the full path to the file
#
# $string is a global containing the string to look for;
# it is NOT a regular expression;
# all characters in it are matched
#
# $REPORT is a global file handle to the output file;
# it must be opened for writing
#
sub wanted {
return unless -f $File::Find::name; # ignore directories, symbolic links,
etc.
open my $FH, '<', $_ or die "Cannot open '$_' $!";
while (<$FH>) {
if (/\Q$string/) {
print $REPORT "$File::Find::name\n";
return;
}
}
return;
}
find( \&wanted, '/test' );
--
Just my 0.00000002 million dollars worth,
Shawn
Linux is obsolete.
-- Andrew Tanenbaum
--
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
http://learn.perl.org/