我正在尝试比较这两个变量。它们都有相同的值,但是,其中一个是 href 变量 - 意思是,它是从这样的文件中读取的
<a href=http://google.com>Variable</a>
它的读取方式如下,但在浏览器中显示为 anchor 标记,因此当我使用 print "$collect_zids{$key} --> $temp"; 比较值时;
I在浏览器中看到为
变量 --> Variable
How it appears in the browser. One text another link.
我假设这两个值不同,因此该代码无法运行
if($collect_zids{$key} eq $from_picture){
print "<h1>Hello</h1>";
}
有没有办法可以将 href 变量转换为普通标量变量,以便我可以比较它们?
谢谢!
附注我认为 Javascript 可能是唯一的方法,但是我没有任何经验。
最佳答案
不存在“href 变量”这样的东西。您有两个标量变量。一种包含纯文本,另一种包含 HTML。您的任务是提取 HTML <a>
中的文本HTML 变量中的标记,并将该文本与纯文本变量中的文本进行比较。
一种方法是从 HTML 变量中删除 HTML。
my $html = '<a href=http://google.com>Variable</a>';
my $text = 'Variable';
$html =~ s/<.+?>//g;
if ($html eq $text) {
say "Equal";
} else {
say "Not Equal [$html/$text]";
}
但是需要强调的是,使用正则表达式解析 HTML 非常脆弱,并且在很多情况下都无法正常工作。使用真正的 HTML 解析器要好得多。 HTML::Strip正是为此目的而设计的。
#!/usr/bin/perl
use strict;
use warnings;
use feature 'say';
use HTML::Strip;
my $html = '<a href=http://google.com>Variable</a>';
my $text = 'Variable';
my $parser = HTML::Strip->new;
$html = $parser->parse($html);
if ($html eq $text) {
say "Equal";
} else {
say "Not Equal [$html/$text]";
}
还值得指出的是,这个问题在 Perl FAQ 中得到了解答。
How do I remove HTML from a string?
Use HTML::Strip, or HTML::FormatText which not only removes HTML but also attempts to do a little simple formatting of the resulting plain text.
更新:在评论中,您说
I have no way of using these methods since I am not explicitly defining the variable.
这显然是不正确的。变量的初始化方式与您如何使用它没有任何关系。
我假设您的 HTML 文本位于变量 $from_picture
中,因此您可以使用如下代码剥离 HTML:
my $parser = HTML::Strip->new;
my $stripped = $parser->parse($from_picture);
if($collect_zids{$key} eq $stripped){
print "<h1>Hello</h1>";
}
我不知道您从哪里得出不能使用我的解决方案的想法,因为我直接初始化变量,您从文件中读取数据。编程的一项重要技能是能够看透复杂的情况并提取相关细节。看来你需要在这方面做更多的工作:-)
关于javascript - 将 href perl 变量转换为普通标量变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47032546/