> Mailing-List: contact [EMAIL PROTECTED]; run by ezmlm
> Date: Wed, 4 Dec 2002 18:26:17 -0800
> From: Michael G Schwern <[EMAIL PROTECTED]>
> Content-Disposition: inline
> Sender: Michael G Schwern <[EMAIL PROTECTED]>
> X-SMTPD: qpsmtpd/0.12, http://develooper.com/code/qpsmtpd/
>
> (The post about 'purge' just made me remember this idea)
>
> Lets say you have a list of program arguments.
>
> @ARGV = ('foo', '--bar=baz', 'yar');
>
> and you want to seperate that into two lists. One of switches and one of
> normal args. You can't just use a grep, you'd have to do this:
>
> my @switches = ();
> my @args = ();
> foreach (@ARGV) {
> if( /^-/ ) {
> push @switches, $_;
> }
> else {
> push @args, $_;
> }
> }
Or the concise, kindof-unreadable way:
push (/^-/ ?? @switches :: @args), $_ for @*ARGS;
It's too bad Perl5 croaks in so many different ways for the equivalent
(the extra parens around push's arglist and the fact that /^-/ ? @s :
@a isn't an array :( )
About your idea, though, I'm rather indifferent. However, a friend of
mine once asked me if Perl had "search" or "find" operation, returning
the I<index> of matching elements. Now am I just being braindead, or
is Perl actually missing this operation? Do you really have to:
my $index;
for @a {
last if la_dee_daa;
$index++;
}
That can't be right....
But if it is, perhaps a C<find> function alongside C<map> and C<grep>
would do. This is all premature---we have to wait for A28 before we
start suggesting any of these. But we'll be ready for 2012! ;)
Luke