perl - 为什么 Perl 无法识别文件名?

标签 perl

我正在尝试使用带有 if 条件的文档来匹配文件名,但 Perl 似乎无法捕获它。我将我的文档定义为:

我的 $file = $filename

其中$filename等于“/Desktop/src/file_top.sv”。我正在运行一个读取 $filename 的程序,如果该文件未命名为“file_top.sv”,则该程序不会创建其他文件(名称不相关)。我正在尝试使用这样的 if 条件来做到这一点:

if($filename =~ /^file\_top.*\.sv$/){
   #do something....
}

但是,这似乎不起作用。难道我做错了什么?您知道其他选择吗?我应该使用整个路径吗?

最佳答案

它不匹配,因为 ^ 表示“字符串的开头”,在您的情况下,它是 Desktop 之前的 / 字符。这是一种仅匹配文件名而不匹配目录路径的方法:

use warnings;
use strict;
use File::Basename qw(basename);

my $filename = "/Desktop/src/file_top.sv";

if (basename($filename) =~ /^file_top.*\.sv$/){
    print "do something....\n";
}
else {
    print "do something else....\n";
}

这将匹配 file_top.svfile_top123.sv 等文件名,但不会匹配 abc_file_top.sv

关于perl - 为什么 Perl 无法识别文件名?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/75151132/

相关文章:

xml - 如何使用 XML::XPath 获取父节点?

multithreading - 在perl中将线程队列对象作为对象变量传递

perl - 将整数数组转换为十六进制字符串

perl - 使用与父脚本相同的 @INC 调用脚本

perl - 无法在 Perl 中使用 qx 从提示行完成命令

perl - IPC::Open3 并确定 child 是否正在等待输入

arrays - 如何通过哈希值之一从哈希数组中获取哈希引用?

Perl 写入文件流导致意外的 SIGPIPE 错误

perl - 如何在 perl 中通过文件套接字使用 http web 服务器?

perl - 如何在 Catalyst 应用程序中公开多对多标签样式关系?