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