[kw-pm] Last night's meeting

Justin Wheeler kw-pm at datademons.com
Fri Jun 19 08:09:59 PDT 2009


Did anyone say anything about STDOUT?

$ perl -ne'rand$.<1and$a=$_}{warn$a'<alpha.html

Justin

On Fri, 19 Jun 2009, John Macdonald wrote:

> On Fri, Jun 19, 2009 at 08:50:58AM -0400, Raymond wrote:
>> (Replying to all this time, oops)
>>
>>> From the above:
>>
>>  $ perl -ne'rand++$n<1?$s=$_:1;END{print$s}' <alpha.html
>>
>> No need to increment a counter like $n, just use $. which gives the
>> line number 1 indexed.
>>
>>  $ perl -ne'rand$.<1?$a=$_:1;END{print$a}' <alpha.html
>>
>> Also replaced $s with $a so it runs safe under 'warnings'. ;) Two more
>> characters saved.
>
> Neat.  And yet, 4 more chars can still be removed:
>
> $ perl -ne'rand$.<1?$a=$_:1}{print$a' <alpha.html
>
> This is using trickery on the internal expansion of the -n
> flag, to allow us to remove the END, its braces, and its
> preceeding semi-colon.
>
> The -n provides a wrapper like:
>
> 	while(<>) {
> 	    # -e arg goes here
> 	}
>
> The }{ in my new -e makes that end up as (blanks for readability
> inserted):
>
> 	while(<>) {
> 	    rand $. < 1
> 		? $a = $_
> 		: 1
> 	}
> 	{
> 	    print $a
> 	}
>
> Down to 25 chars.
>
> Unfortunately, while perl 5.10 provides "say" as an alternative
> to "print", that 2 char saving is overwhelmed by having to
> enable it with "use feature qw(say);"
>
> I'd consider it cheating to provide the "use feature qw(say)"
> using the -M switch, since if the contents of a -M switch
> doesn't get included in the char count you could just stick
> the whole program there.  E.g.:
>
> 	$ perl -M'warnings;print"hi\n";' -pe '' </dev/null
> 	hi
>
> is a zero char script to print hi under such rules, and it could
> do much more complicated things with those same 0 chars, using the
> right "module" inclusion.
>
> A similar sort of cheat is available if you put the script into
> a file, run it as "perl filename"  and only count the number of
> chars in the file as significant - a file containing "eval$0"
> (6 chars - doesn't need the terminating newline) can be an
> extemely complicated program, limited only by the maximum
> length permitted for a filename on the supporting OS.
> _______________________________________________
> kw-pm mailing list
> kw-pm at pm.org
> http://mail.pm.org/mailman/listinfo/kw-pm
>


More information about the kw-pm mailing list