模式匹配/ xxx/xxx/xxx

wor*_*wer 1 perl pattern-matching

我有

$w="/fold1/fold2/qwerty.h"
Run Code Online (Sandbox Code Playgroud)

我想剪切/qwerty.h并获取/ fold1/fold2

我试过了

$w=~s/\/.+\.h\z//; and $w=~s/\/.+?\.h\z//;
Run Code Online (Sandbox Code Playgroud)

但那些删除整个字符串.

$w=~s/\/\w+\.h\z//;
Run Code Online (Sandbox Code Playgroud)

但是假设我有qwe\rty.h而不是qwerty.h.这不会再起作用了.

bri*_*foy 7

使用File :: Basename,标准库中的模块之一:

 use File::Basename;
 my $dir = dirname( $path );
Run Code Online (Sandbox Code Playgroud)

通常,当您知道数据是某种类型时,请尝试将它们视为该类型.在这种情况下,您知道它是一个文件路径,因此不要将其视为一般字符串,而应将其视为文件路径.