in reply to One-liner's quoting and subroutine

Probably is wiser to turn the whole thing into a script, (update: and run it remotely) i think ssh is able to do this ;=) you also eliminate the quoting problem.

I like oneliners but, please take a read of the recent Meditation covering pro and cons of oneliners.

For your curiosity you can cut a lot your Perl oneliner: the whole BEGIN { $sum = 0 }; is unneeded: without using strict you can freely use a variable even if not initialized so when you do $first_time_seen += 1; Perl knows that you want a number, if it is not initialized Perl choose 0 as wise precognition, then add 1 and all is good. Also ; is unneeded after a block declaration.

The chomp instruction too is unnecessary: you never print the name of the file, but anyway if in oneliner you are dealing with newlines -l switch is your friend! see perlrun.

You can also cheat to not type the END block at all using the eskimo greeting operator. If so the original oneliner becomes a lot shorter: something like:

perl -wne '$sum += (stat)[7]}{print "$sum\n"'

If you want to put the "human readable sizes" code the oneliner become suddenly fat and unfriendly: the best I arrived is, in the END created by the eskimo greeting:

@suf=qw(B KB MB GB TB);while($sum>=1024){$sum/=1024;shift @suf}prin +t $sum," ",shift @suf

L*

There are no rules, there are no thumbs..
Reinvent the wheel, then learn The Wheel; may be one day you reinvent one of THE WHEELS.

Replies are listed 'Best First'.
Re^2: One-liner's quoting and subroutine
by reisinge (Hermit) on Sep 27, 2016 at 09:40 UTC

    I like how you shortened the original one-liner, thanks :-). However, I had to modify it so it works on my system:

    perl -lne '$sum += (stat)[7]}{print $sum'