Re: perl

[prev] [thread] [next] [lurker] [Date index for 2006/12/22]

From: Abigail
Subject: Re: perl
Date: 10:02 on 22 Dec 2006
--hwvH6HDNit2nSK4j
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
Content-Transfer-Encoding: quoted-printable

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:
> >=20
> > > 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.
> >=20
> > 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?
>=20
>   Um ... <raises hand> ... I'd like somethimg a bit more consistent.
>=20
>   A typical programic idiom I use (when programming in C) is:
>=20
> 	if (argc =3D=3D 1)
> 		do_some_process(stdin);
> 	else
> 	{
> 		for (i =3D 1 ; i < argc ; i++)
> 		{
> 			input =3D fopen(argv[i],"r");
> 			do_some_process(input);
> 			fclose(input);
> 		}
> 	}
>=20
>   So imagine my surprise when:
>=20
> 	if (scalar(@ARGV) =3D=3D 1)
> 	{	# the one bit of consistancy I can do without actually
> 		&do_some_process(STDIN);
> 	}
> 	else
> 	{
> 		for ($i =3D 1 ; $i < scalar(@ARGV) ; $i++)
> 		{
> 			open INPUT,$ARGV[i];
> 			&do_some_process(INPUT);
> 			close INPUT;
> 		}
> 	}
>=20
>   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 sin=
ce
> it's only defined when using <ARGV> apparently---lovely), so okay, I adju=
st
> some numbers and it *still* fails because you can't pass file handles to
> subroutines.
>=20
>   Only, it seems like you *can* but only if you use the *obvious* notation
>=20
> 	open INPUT,$ARGV[i];
> 	&do_some_processing(*INPUT);
> 	close INPUT;
>=20
>   Never mind the fact that every @#$@#$ variable in Perl is preceeded by a
> '$', '@' or a '%' *except* for filehandles, diretory handles and block
> labels.
>=20
>   Yes, C has its quirks too, but at least there I can actually pass any t=
ype
> of variable to a subroutine without having a special notation for a certa=
in
> 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

--hwvH6HDNit2nSK4j
Content-Type: application/pgp-signature
Content-Disposition: inline

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.0 (GNU/Linux)

iD8DBQFFi60rBOh7Ggo6rasRApJFAKDBVV4CG8ymp5TGjg8E3a9GBS+q3wCcD5zg
tGuMW/N3EKBpA/ahzXU9myw=
=a5LP
-----END PGP SIGNATURE-----

--hwvH6HDNit2nSK4j--

Generated at 14:01 on 28 Dec 2006 by mariachi 0.52