On Fri, Dec 22, 2006 at 02:43:08AM -0500, Sean Conner wrote:
> It was thus said that the Great David Cantrell once stated:
> > On Sun, Dec 17, 2006 at 09:36:52PM -0800, Aaron J. Grier wrote:
> > 
> > > this is exactly what I hate about perl.  "there's more than one way to
> > > do it" invariably means that some dumbfucks out there will attempt to do
> > > it every single way possible in the language.  perl apparently prides
> > > itself on this.
> > 
> > A general purpose language which can't be used in different ways to
> > solve different problems is not fit for purpose.  Are you proposing that
> > programming languages should be rigid and unsuitable for a wide range of
> > tasks?
> 
>   Um ... <raises hand> ... I'd like somethimg a bit more consistent.
> 
>   A typical programic idiom I use (when programming in C) is:
> 
>       if (argc == 1)
>               do_some_process(stdin);
>       else
>       {
>               for (i = 1 ; i < argc ; i++)
>               {
>                       input = fopen(argv[i],"r");
>                       do_some_process(input);
>                       fclose(input);
>               }
>       }
> 
>   So imagine my surprise when:
> 
>       if (scalar(@ARGV) == 1)
>       {       # the one bit of consistancy I can do without actually
>               &do_some_process(STDIN);
>       }
>       else
>       {
>               for ($i = 1 ; $i < scalar(@ARGV) ; $i++)
>               {
>                       open INPUT,$ARGV[i];
>                       &do_some_process(INPUT);
>                       close INPUT;
>               }
>       }
> 
>   Doesn't work at all.  Problem one (remember, I come from a C background
> here), $ARGV[0] *doesn't* contain the program name ($ARGV isn't right since
> it's only defined when using <ARGV> apparently---lovely), so okay, I adjust
> some numbers and it *still* fails because you can't pass file handles to
> subroutines.
> 
>   Only, it seems like you *can* but only if you use the *obvious* notation
> 
>       open INPUT,$ARGV[i];
>       &do_some_processing(*INPUT);
>       close INPUT;
> 
>   Never mind the fact that every @#...@#$ variable in Perl is preceeded by a
> '$', '@' or a '%' *except* for filehandles, diretory handles and block
> labels.
> 
>   Yes, C has its quirks too, but at least there I can actually pass any type
> of variable to a subroutine without having a special notation for a certain
> class of variables.


You know, in Perl, the equivalent of the C snippet would just be:

    do_some_process;

while in do_some_process, you'd use the '<>' to read input. Perl has the
snippet build in - if there are no arguments, '<>' will read from the
file(s) given as arguments.


Don't blame Perl for not having to translate your C code.



Abigail

Attachment: pgpuDqdmUzAh8.pgp
Description: PGP signature

Reply via email to