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
pgpuDqdmUzAh8.pgp
Description: PGP signature
