ファイルのコピーでも使ったけど、正規表現で何かを取り出したいときに使いやすいコード。



1
(my $to_dir = $to) =~ s|([^/]*?)$||;


例の場合は、ファイルパスからディレクトリ名を取り出す。

この場合$toは変更されない。

$toの中身が$to_dirにコピーされて、$to_dirに対して置換が実施される。

2行に分けて書いても同じだが、1行で書けるのが便利。



1
2
my $to_dir = $to;
$to_dir =~ s|([^/]*?)$||;


置換の内容は、一番右の「/(スラッシュ)」よりも右側を、空文字列に置き換える(平たく言うと、削除する)。



他にも、ファイル名だけを取り出してみたり、



1
(my $filename = $path) =~ s|^.*/||;


拡張子(ファイル名のピリオド以降)を取り出してみたり、



1
(my $ext = $path) =~ s/^.*.//;


してみる。