Perl字符串比较

时间:2015-01-15 16:42:12

标签: string perl comparison

我正在尝试将字符串与另一个字符串进行比较。

如果它是包含内容的JSON结构,我想打印“包含内容”。 如果它是一个不包含东西的JSON结构,我打印“空” 如果它不在花括号“{}”之间,我会打印出错误。

这就是我所做的:

if($content =~ m/{.+}/){
    print "Contains things \n";
} elsif($content eq "{}"){
    $job_status{$url}="";
    print "empty \n";
} else {
    print "Error \n";
}

当我将“{}”传递给变量$ content时,他不会输入“elsif”,而是转到“else”,并抛出错误。 我试图在if中加上“==”而不是“eq”,即使我知道这是数字。这样,他进入“elsif”,并打印出“空”,就像他应该用“eq”一样,并抛出:

Argument "{}" isn't numeric in numeric eq (==)". 

我可以使用JSON库,但我不喜欢。

感谢您的帮助!

Bidy

4 个答案:

答案 0 :(得分:1)

它对我有用。 $content是否有换行符?试试chomp $content;

use warnings;
use strict;

my $content = '{}';
if($content =~ m/{.+}/){
    print "Contains things \n";
} elsif($content eq "{}"){
    print "empty \n";
} else {
    print "Error \n";
}

__END__

empty 

答案 1 :(得分:1)

如果我在{}

之后添加换行符,我可以复制该行为
#!/usr/bin/perl
use strict;
use warnings;

my $content = "{}\n";

if($content =~ m/{.+}/){
    print "Contains things \n";
} elsif($content eq "{}"){
    print "empty \n";
} else {
    print "Error \n";
}

如果我将eq替换为==,则返回"错误",它返回empty,因为"{}""{}\n"数字为0.正如你所提到的那样,会引发警告。

在处理之前,您可以尝试chomp $content

答案 2 :(得分:1)

顶级JSON thingy可以是一个对象({...})或一个数组([...]),但你只是检查其中一个。如果你只是想看看它是否为空,我会检查字符串的长度:

chomp $possible_json;
if( $length $possible_json >= 3 ) { ... }

您也可以考虑Randal Schwartz的regex for JSON parsing。它并不处理所有事情,但对于简单的事情来说它通常就足够了。

答案 3 :(得分:0)

我可能最终会分手:

unless ($content) {print "Error\n"};
$content =~ /{(.*)}/
my $resp = $1;
if ($resp) {
 print "Contains Things ($resp)\n";
} else {
 print "Empty\n";
}