I've done this several ways, depending on my mood.

1.
@path = split(/\//, $file);
$filename = $path[$#path];

2.
$filename = $1 if ($file =~ m|/([^/]+)$|);

3.
use File::Basename;
$filename = basename($file);



1 uses split and $#array, which can be nasty if someone set $[ to something
other than 0, and not very portable


2 Not very portable 

3 best method

-----Original Message-----
From: Sandor W. Sklar [mailto:[EMAIL PROTECTED]]
Sent: Tuesday, April 24, 2001 9:52 AM
To: [EMAIL PROTECTED]
Subject: pulling out part of a /path/to/a/file


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