I just discovered this, and do not know if it's commonly used in golf (it's been a long time since I last played): if you only need a single hash in your script, you can use the symbol table itself.
Compare the classic "remove duplicate lines" one-liner
perl -ne'$s{$_}++||print' file
with
perl -ne'$$_++||print' file
Three characters in one shot!
-- Philippe "BooK" Bruhat
The learned man makes a mistake but once... but the truly stupid keep practicing until they get it right. (Moral from Groo The Wanderer #75 (Epic))
* Philippe 'BooK' Bruhat (philippe.bru...@free.fr) wrote:
> Hi,
> I just discovered this, and do not know if it's commonly used in golf > (it's been a long time since I last played): if you only need a single > hash in your script, you can use the symbol table itself.
> Compare the classic "remove duplicate lines" one-liner
> perl -ne'$s{$_}++||print' file
> with
> perl -ne'$$_++||print' file
Whoo, nice :-) I'll add it to my notes, thanks :-)
> Three characters in one shot!
> -- > Philippe "BooK" Bruhat
> The learned man makes a mistake but once... but the truly stupid keep > practicing until they get it right. > (Moral from Groo The Wanderer #75 (Epic)) > _______________________________________________ > Cog-book mailing list > Cog-b...@perl-hackers.net > http://perl-hackers.net/mailman/listinfo/cog-book
> Compare the classic "remove duplicate lines" one-liner
> perl -ne'$s{$_}++||print' file
> with
> perl -ne'$$_++||print' file
> Three characters in one shot!
It has its limitations though. Like namespaces:
~$ perl -e 'print"a\n::a\nmain::a\n::main::a\n"; ' | perl -ne'$$_++||print' a ~$
... and missing newlines:
~$ perl -e 'print"a\n1"; ' | perl -ne'$$_++||print' a Modification of a read-only value attempted at -e line 1, <> line 2. ~$
Eirik -- For every complex problem, there is a solution that is simple, neat, and wrong. -- H. L. Mencken A good plan today is better than a perfect plan tomorrow. -- Patton
> ~$ perl -e 'print"a\n1"; ' | perl -ne'$$_++||print' > a > Modification of a read-only value attempted at -e line 1, <> line 2. > ~$
> Eirik
In real golfing the limitation that bites you most is the direct version of what causes the problem above: $$_ doesn't work as storage space if $_ is a postive integer. Though this can sometimes be worked around by using @$_ or $#$_