我需要将输入地址转换为指定格式
#!/usr/bin/perl
my $file_path ="\\\abc.com\a\t\temp\L\\";
#---- Help in this regex
$file_path =~ s//\//\/gi;
#---- Output format needed
#$file_path ="\\abc.com\a\t\temp\L\";
printf $file_path;
答案 0 :(得分:5)
我猜你想要规范化UNC路径,在这种情况下,开始时的双\
很重要,而Ether和KennyTM的答案会产生错误的结果。选择以下任一方法。
use File::Spec qw();
print File::Spec->canonpath('\\\abc.com\a\t\temp\L\\');
use URI::file qw();
print URI::file->new('\\\abc.com\a\t\temp\L\\', 'win32')->dir('win32');
__END__
\\abc.com\a\t\temp\L\
答案 1 :(得分:2)
如果\
中的my $file_path
不是转义字符,
s/^\\\\|\\\\$/\\/g
答案 2 :(得分:2)
您似乎想要做的是将\\
的每次出现都展开到\
。但是,当您在regexp中实际使用它时,您需要转义\
的每次出现,如下所示:
use strict; use warnings;
my $a = '\\\abc.com\a\t\temp\L\\';
# match \\\\ and replace with \\
(my $b = $a) =~ s/\\\\/\\/g;
print $b . "\n";
...产生文字字符串:
\abc.com\a\t\temp\L\
请注意,我没有像你那样用双引号指定输入字符串。还不完全清楚你正在开始的 literal 字符串是什么,好像它是用双引号指定的,它需要有更多的反斜杠(每两个反斜杠变成一个)。请参阅perldoc perlop下的插值讨论,正如我在回答您的其他问题时所提到的那样。