Beefy Boxes and Bandwidth Generously Provided by pair Networks
laziness, impatience, and hubris
 
PerlMonks  

Re: Perl losing, unfairly

by dreadpiratepeter (Priest)
on Jun 15, 2004 at 12:00 UTC ( [id://366842]=note: print w/replies, xml ) Need Help??


in reply to Perl losing, unfairly

Actually, before you get you panties in a twist, notice that he is not adding the whole invocation to the count, only the -le characters. Thus his count isn't off, and replacing the -le with ,"\n" is actually longer, and ,$/ is a wash.
Actually looking through the examples he seems to be pretty non-biased. All the examples use the same whitespacing between tokens, and they all seem to be written efficiently with being obsfucated. My only question is whether sed and awk can be considered part of shell. I.E. if shell can use sed and awk in it's scripts, couldn't some of the other languages get a win by using system to call out to sed or awk (or Perl)?


-pete
"Worry is like a rocking chair. It gives you something to do, but it doesn't get you anywhere."

Replies are listed 'Best First'.
Re^2: Perl losing, unfairly
by demerphq (Chancellor) on Jun 16, 2004 at 11:08 UTC

    I mailed the author with some issues and have recieved a reply. One part is relevent to what you just said:

    i fixed. For example, for   % perl -le 'print $ARGV[0]' i take the length of   -l print $ARGV[0]

    But the fact remains that he has NOT been generous to Perl. In fact the way I read the code hes been ungenerous to perl. Consider all the examples that involve or exit 1 (which is not normal idion to return an error value to the OS in perl, unless that error MUST specifically be 1, any sane programmer would use die,) or the fact that in many of the examples he includes the invocation in the perl examples but not in any of the other examples.

    But what really gets me is the File::Find example. His code reads to me the way someone would write it if they deliberately want to disadvantage perl.

    use File::Find; find({ no_chdir => 1, wanted => sub { if (($o = $_) =~ s/\.c$/.o/ && -M $_ <= -M $o) { print "compiling $_ to $o\n"; system qw(gcc -c -o), $o, $_; } } }, '.');

    Why the no_chdir here, or the options hash at all?

    use File::Find; find sub { if (($a = $_) =~ s/\.c$/.o/ && -M $_ <= -M $a) { print "compiling $_ to $a\n"; system qw(gcc -c -o), $a, $_; } }, '.';

    So, by my reading of this once these changes are made Perl wins.


    ---
    demerphq

      First they ignore you, then they laugh at you, then they fight you, then you win.
      -- Gandhi


      Actually, I missed that in the File::Find example. In fact either the Perl test (and some others) is invalid or the shell test (and some others) is.
      The shell script compiles recursively, and the Perl has a check to avoid compiling recursively. One of them violates the goal of the script

      As far as the exit stuff goes, I realized that it could be written better as:
      exit !-e "/etc/mtab"
      I emailed the author with the exit changes (and reiterated your File::Find findings). Hopefully he will resolve them.


      -pete
      "Worry is like a rocking chair. It gives you something to do, but it doesn't get you anywhere."

        As far as the exit stuff goes, I realized that it could be written better as:

        Except that will exit regardless, which I dont think is the objective. I prefer

        -e "/etc/mtab" or die;

        :-)


        ---
        demerphq

          First they ignore you, then they laugh at you, then they fight you, then you win.
          -- Gandhi


Log In?
Username:
Password:

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

How do I use this?Last hourOther CB clients
Other Users?
Others about the Monastery: (8)
As of 2024-04-19 14:22 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found