好的,我有一个让我疯狂的问题。我正在尝试使用正则表达式提取子字符串:
($var) = $data =~ m/regex/;
它正在工作,但返回的“字符串”与真正的substr不完全相同。打印字符串看起来像真正的substr,但用if($ var eq“substr”)检查不会返回true。我也注意到当我尝试用$ var。=“..”添加一些内容时;我得到(如果$ var是“你好”)“.. llo”。
这是什么回归?
我在Linux中运行它,如果它有所作为。我认为不会,但是这个代码在Windows中适用于我。
以下是代码示例:
$datatxt contains
..
udir=/home/me/
..
use File::Read;
my $data = read_file( {skip_comments => 1}, $datatxt);
($udir) = $data =~ m/udir=(.*)/;
print $udir; #prints /home/me/
print ".".$udir."."; #prints ..home/me/
if ($udir ne "/home/me/") {
print "not equal"; #prints...
}
答案 0 :(得分:2)
字符串以回车符结束。
print "hello\r..\n"; # Looks like "..llo"
在这些情况下很有用:
use Data::Dumper;
local $Data::Dumper::Useqq = 1;
print(Dumper($str));
可能最好的解决方案是改变
chomp;
到
s/\s+\z//;
它修剪所有尾随空格而不仅仅是尾随换行符。
答案 1 :(得分:1)
您需要提供特定代码。我试过这段代码:
#!/usr/bin/perl
$_ = <>;
if (($a) = $_ =~ m/(hello)/) {
print "it is equal\n" if ($a eq "hello");
$a .= "..";
print "$a\n";
} else {
print "unmatched\n";
}
应该重现你的问题,并且匹配有效。我正在使用perl v5.14.2运行linux。在输入“hello world”时,输出为:
it is equal
hello..