-s: Not Just For File Sizes!

| | Comments (0)
So apparently a lot of people do not know about -s. Not the file test for size, but the command-line switch. From the docs:

-s enables rudimentary switch parsing for switches on the command line after the program name but before any filename arguments (or before an argument of --). This means you can have switches with two leading dashes (--help). Any switch found there is removed from @ARGV and sets the corresponding variable in the Perl program. The following program prints "1" if the program is invoked with a -xyz switch, and "abc" if it is invoked with -xyz=abc.

        #!/usr/bin/perl -s
        if ($xyz) { print "$xyz\n" }

Do note that --help creates the variable ${-help}, which is not compliant with "strict refs".


I use this a lot. A good 20 or so of the scripts I keep in my private bin directory have it, and I use it fairly often for one-offs too. Here's an example, from my bbeditp script:

#!/usr/bin/perl -s
our $g;
my $prog = $g ? 'gluedoc' : 'perldoc';
my $doc = shift;
open STDOUT, "|bbedit --view-top --clean -t $doc";
system $prog, '-t', $doc;

If I call bbeditp Finder, it looks for a perl module named "Finder", and opens it as an text window in BBEdit. If I call bbeditp -g Finder, it looks for a glue doc file for the application "Finder". use.perl.org

Leave a comment

<pudge/*> (pronounced "PudgeGlob") is thousands of posts over many years by Pudge.

"It is the common fate of the indolent to see their rights become a prey to the active. The condition upon which God hath given liberty to man is eternal vigilance; which condition if he break, servitude is at once the consequence of his crime and the punishment of his guilt."

About this Entry

This page contains a single entry by pudge published on February 7, 2007 1:19 PM.

Self-Contradiction was the previous entry in this site.

Ask Pudge 23: MTP: Colbert and Chris Hedges is the next entry in this site.

Find recent content on the main index or look in the archives to find all content.