That'll work, but on a finer point, if you need to be thinking about
optimization at the moment:

($substring1 = $string) =~ s/.*\\(.*)/$1/;

....is about 4 times slower than:

($substring2 = $string) =~ s/.*\\//;

....because the second one doesn't have to store the matched value inside the
parens in $1.

In test below:
substring1 code took:  20 wallclock secs (20.05 usr +  0.00 sys = 20.05 CPU)
substring2 code took:   5 wallclock secs ( 5.15 usr +  0.00 sys =  5.15 CPU)

So it can be best to use $1 thru $9 only when necessary if speed matters.

Gary

======

Notes:

In this test script we do the substitution a million times for each method and
then print the benchmark results.  You can tailor this script to check the
comparison on any two or more different ways of doing something.

#!perl.exe

use Benchmark;

$string ='C:\PerlScripts\TestSamples\StringTest.pl';

# substring1 method
        $i = 0;
        $t0 = new Benchmark;
        while ($i < 1000000) {
                ($substring1 = $string) =~ s/.*\\(.*)/$1/;
                $i++;
        }
        $t1 = new Benchmark;
        $td = timediff($t1, $t0);
        print "substring1 code took:  ", timestr($td), "\n\n";

# substring2 method
        $i = 0;
        $t0 = new Benchmark;
        while ($i < 1000000) {
                ($substring2 = $string) =~ s/.*\\//;
                $i++;
        }
        $t1 = new Benchmark;
        $td = timediff($t1, $t0);
        print "substring2 code took:  ", timestr($td), "\n\n";

__END__

Printed result:

substring1 code took:  20 wallclock secs (20.05 usr +  0.00 sys = 20.05 CPU)

substring2 code took:   5 wallclock secs ( 5.15 usr +  0.00 sys =  5.15 CPU)


> -----Original Message-----
> From: Shawn [mailto:[EMAIL PROTECTED]]
> Sent: Sunday, January 06, 2002 1:03 PM
> To: [EMAIL PROTECTED]; David
> Subject: Re: Using regexp to get a substring
>
>
> "David" <[EMAIL PROTECTED]> wrote in message
> [EMAIL PROTECTED]">news:[EMAIL PROTECTED]...
> > Hello All,
> >
> > I am beginner and need some helps. Thanks a lot!
> >
> > The question is, if I have a string, for example
> > "C:\PerlScripts\TestSamples\StringTest.pl", how do I use regexp to parse
> > this string and get substring after the last backslash ("StringTest.pl").
>
> Hey David,
>   This should work for you:
>
> use strict;
> my $String='C:\PerlScripts\TestSamples\StringTest.pl';
> (my $substring =$string) =~s/.*\\(.*)/$1/;


-- 
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to