> Often I need to extract the file name from a path.
$current_file = "c:/somedir/test.ps"; 
@split_path = split("/",$current_file); 
$current_file = @split_path[-1]; 
print $current_file; 

You want to use the '$' sigil here, not '@' (you're refering to just one 
element, not the whole array):
$current_file = $split_path[-1];

or
$current_file = pop @split_path;

#!/perl -w
 
$current_file = "c:/somedir/test.ps";
$current_file =~ /.*(\/|\\)(.*)/gi;
 
print $2;
 
Er, you don't want/need the /g (only matches once) or the /i (no letters 
to ignore case on), you don't want to match in the null context so, at 
least:

#!/perl -w
 
my $current_file = "c:/somedir/test.ps";
if ( $current_file =~ /.*(\/|\\)(.*)/ ) {
  print $2;
} 
else {
  warn("whacky file path: $current_file\n");
} 

If you don't test your match, you'll never know if it worked.  There's an 
'interesting' feature of perl this way, if the match fails "$2" retains 
any value it may have had, so you can get a result from a previous match. 
Not a good thing and hard to figure out.

This is relying on the initial "dot star" being greedy enough to eat all 
preceeding slashes and will fail w/
c:myfile.txt

and, on non-DOS
/tmp/this\ filename\ has\ embeded\ spaces

Probably the best way is to let somebody else do it:
   File::Basename(3)
NAME
     fileparse - split a pathname into pieces
     basename - extract just the filename from a path
     dirname - extract just the directory from a path

SYNOPSIS
         use File::Basename;

         ($name,$path,$suffix) = fileparse($fullname,@suffixlist);
         $name = fileparse($fullname,@suffixlist);
         fileparse_set_fstype($os_string);
         $basename = basename($fullname,@suffixlist);
         $dirname = dirname($fullname);

         ($name,$path,$suffix) = 
fileparse("lib/File/Basename.pm",qr{\.pm});
         fileparse_set_fstype("VMS");
         $basename = basename("lib/File/Basename.pm",".pm");
         $dirname = dirname("lib/File/Basename.pm");

a

Andy Bach
Systems Mangler
Internet: [EMAIL PROTECTED]
VOICE: (608) 261-5738  FAX 264-5932

 Punctuality is the virtue of the bored.
--Evelyn Waugh (1903-1966)
_______________________________________________
Perl-Win32-Users mailing list
[EMAIL PROTECTED]
To unsubscribe: http://listserv.ActiveState.com/mailman/mysubs

Reply via email to