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