Unknown Warning

Paul Fenwick pjf at perltraining.com.au
Mon Oct 21 00:18:45 CDT 2002


G'day Scotty / Mongers,

On Mon, Oct 21, 2002 at 02:56:30PM +1000, Scott Penrose wrote:

> for (my $i = scalar(split(/ /, $fred)); $i > 0; $i--) {
>         print $i . "\n";
> }

[snip]

> a) A bug (5.6 and 5.8 do the same thing)
> 
> b) Something special about 'scalar'

Split in a scalar context will split into @_ (Camel, first ed, p185).
In Perl 4, using ?? as pattern delimiters would do the same thing in
array context.  Perl 5 will still clobber @_ if you use split in a
scalar context, but it's considered deprecated, hence the warning.
Clobbering @_ probably isn't what you want, anyway.

If you're splitting on a single character, you can use tr/// to
count the occurances of that character, which will be faster than
split. 

If you're using a more complex pattern, you can force into an array
context, but the return into a scalar:

	my $i = @{[split(/ /, $fred)]};

I'm sure there are other solutions using regexpes.  TMTOWTDI.

Cheers,

	Paul

-- 
Paul Fenwick <pjf at perltraining.com.au> | http://perltraining.com.au/
Director of Training                   | Ph:  +61 3 9354 6001
Perl Training Australia                | Fax: +61 3 9354 2681



More information about the Melbourne-pm mailing list