$file{(reverse(split(/\//,$path)))[0]}++ if ($part =~ /A1\//);
where $path is "/home/fs3/mserv/HELP" or somesuch.
I'm curious - is there a better way to do this? I tried a number
of regexps, but couldn't come up with one, so had fun creating
the above one liner. :)
--Chan
Chan Wilson Chief Hard-Question Answer Person
SRI Intl. Network Information Systems Center
333 Ravenswood Ave., EJ287 Internet: cwi...@nisc.sri.com
Menlo Park, CA., 94025 Phone: (415)859-4492
"If I want to be a surfer this month, I bloody well will be."
That's pretty snazzy. You could avoid the split with a temp array:
$file{@path = split(m#/#,$path), pop @path}++ if $part =~ m#A1/#;
But it's not as beautificial as the reverse.
To pull the last component of a pathname off with a regular expression,
one can say things like:
($file) = $path =~ m#.*/(.*)#;
($file = $path) =~ s#.*/##;
These both use a temp variable, of course, and don't just slip right
into your expression easily, though you can use the comma operator:
$file{($file) = $path =~ m#.*/(.*)#, $file}++ if $part =~ m#A1/#;
$file{($file = $path) =~ s#.*/##, $file}++ if $part =~ m#A1/#;
For the first one, you can get by without a temp var, which after all is
only being used in a list to supply an array context, which can be provided
other ways:
$file{join('',$path =~ m#.*/(.*)#)}++ if $part =~ m#A1/#;
or
$file{($path =~ m#.*/(.*)#)[0]}++ if $part =~ m#A1/#;
It might be better, however, to simply use rindex:
$file{substr($path,rindex($path,'/')+1)}++ if $part =~ m#A1/#;
I don't know if any of these are faster than your solution, though.
Perl programming is an *empirical* science. :-)
Larry
Larry writes:
> $file{@path = split(m#/#,$path), pop @path}++ if $part =~ m#A1/#;
> ($file) = $path =~ m#.*/(.*)#;
> ($file = $path) =~ s#.*/##;
> $file{($file) = $path =~ m#.*/(.*)#, $file}++ if $part =~ m#A1/#;
> $file{($file = $path) =~ s#.*/##, $file}++ if $part =~ m#A1/#;
> $file{join('',$path =~ m#.*/(.*)#)}++ if $part =~ m#A1/#;
> or
> $file{($path =~ m#.*/(.*)#)[0]}++ if $part =~ m#A1/#;
> $file{substr($path,rindex($path,'/')+1)}++ if $part =~ m#A1/#;
>Larry
Bpbpbpbpbpbpbpbpbpbpb (the sound of shaking one's head back and forth
real fast and your lips slap around). Amazing stuff.