hi,

here's a regex that matches what you're after:

$filename =~ m/\/(File-[^\/]+)/;
$part_you_want = $1;

Simply using negation to match "File-" (and anything which is not a "/")
which is preceeded by a "/", is what you want.  The trailing / is
optional.

File::Basename is used to separate the filename into 3 base elements,
the path, the name and the extension.  Since what you're after is part
of the path, using it only adds an unneeded step.

fileparse("/home4/dsad..[sniped]..03/File-11523.1/html/main.htm");

returns 
/home4/dsadmin/7790/DocuShare/documents/b004/File-1156/html/ as the path
main as the name  (base)
.htm as the extension.

Which still leaves you parsing the path for the part you want.

Hope that helps,

--A

"Sandor W. Sklar" wrote:
> 
> Hi, folks ...
> 
> I'm generating a list of files (from a find subroutine) and putting
> them in an array.  The list looks like ...
> 
> /home4/dsadmin/7790/DocuShare/documents/b003/File-11523.1
> /home4/dsadmin/7790/DocuShare/documents/b003/File-11587.1
> /home4/dsadmin/7790/DocuShare/documents/b003/File-11651.1
> /home4/dsadmin/7790/DocuShare/documents/b004/File-1156/html/main.htm
> /home4/dsadmin/7790/DocuShare/documents/b004/File-1604/html/main.htm
> 
> (... a small sample)
> 
> and I'm trying to get just the "File-nnnn" part of each line; some
> lines that I am matching against will have a trailing slash, with
> additional path info that I'm not interested in; other lines will
> have a period and a number following, which I am also not interested
> in.
> 
> Perhaps the File::Basename module would do what I want, but I can't
> get my mind around its documentation.  I thought of using split on
> each line (splitting on the "/", and then looking each element of the
> array returned), but that seems, well, stupid.  I'm sure that there
> is some really simple magic here; I just don't see it.  Can someone
> enlighten me please?
> 
> Thanks,
> -s-
> --
> sandor w. sklar
> unix systems administrator
> stanford university itss-css

Reply via email to