Noob question: Is all this typecasting normal?
J Kenneth King
james at agentultra.com
Tue Jan 6 15:04:04 EST 2009
"Gabriel Genellina" <gagsl-py2 at yahoo.com.ar> writes:
> En Mon, 05 Jan 2009 02:03:26 -0200, Roy Smith <roy at panix.com> escribió:
>
>
>> The other day, I came upon this gem. It's a bit of perl embedded in a
>> Makefile; this makes it even more gnarly because all the $'s get
>> doubled to
>> hide them from make:
>>
>> define absmondir
>> $(shell perl -e ' \
>> sub absmon { my $$a = $$_[0]; \
>> if ( $$^O =~ m/cygwin|MSWin32/i ) {
>> $$prefix = `/bin/mount -p|awk "NR==2{print
>> \\\$$1}"`;
>> chomp($$prefix); \
>> $$a = ($$_[1]||"$(PWD)") . "/$$a" \
>> unless ( $$a =~ m !^(:?$$prefix|/|[A-Za-z]:)! ); \
>> } else { $$a = ($$_[1]||"$(PWD)") . "/$$a" unless ( $$a =~ m !^/!
>> ); } \
>> return unslash(undot(undotdot($$a))); }; \
>> sub unslash ($$) { $$_[0] =~ s://+:/:g; $$_[0] =~ s:/$$::;
>> return($$_[0]);
>> }; \
>> sub undot ($$) { $$_[0]=~s:/\./:/:g; return ($$_[0]); }; \
>> sub undotdot ($$) { my $$in = $$_[0]; \
>> return ( $$in =~ s:/[^/.][^/]*/\.\.::g )?undotdot($$in):$$in; }; \
>> print absmon("$(1)","$(2)"); \
>> ' )
>> endef
>>
>> Barf-o-rama. I know what it's supposed to do, and I still can't
>> figure it out.
>
> Ouch! Me too, when I come to some piece of Perl code I've written some
> years ago, I invariably think "what's all this noise?". Never happens
> with other languages I've used in the past.
I still occassion upon the chance to write some Perl, and even as a
full-time developer who works with Python for a living, I relish every
opportunity.
The funny thing is that I've never had the problem of writing code like
this in Perl. The example is a very poor use-case and doesn't reflect on
the useful/useless-ness of the language itself but more on the choices
of the implementor.
Perl is a very useful language overall and when used properly, very
powerful.
More information about the Python-list
mailing list