Perl 字符串比较
Perl String comparison
我正在尝试将一个字符串与另一个字符串进行比较。
如果它是一个包含东西的 JSON 结构,我想打印 "contains things"。
如果它是一个 JSON 结构,不包含东西,我打印 "empty"
如果它不在大括号“{}”之间,我会打印出有错误。
这是我所做的:
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",然后打印 "empty",就像他应该对 "eq" 做的那样,然后抛出:
Argument "{}" isn't numeric in numeric eq (==)".
我可以使用 JSON 库,但我不喜欢。
感谢您的帮助!
比迪
对我有用。 $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
如果我在 {}
:
之后添加换行符,我可以复制该行为
#!/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";
}
就是returns"Error",如果我把eq
换成==
,就是returnsempty
,因为"{}"
] 和 "{}\n"
在数值上为 0。如您所述,会引发警告。
您可以在处理之前尝试 chomp $content
。
我可能最终会把它拆散:
unless ($content) {print "Error\n"};
$content =~ /{(.*)}/
my $resp = ;
if ($resp) {
print "Contains Things ($resp)\n";
} else {
print "Empty\n";
}
顶层 JSON 东西可以是对象 ({...}
) 或数组 ([...]
),但您只检查其中之一。如果你只是想看看它是否为空,我会检查字符串的长度:
chomp $possible_json;
if( $length $possible_json >= 3 ) { ... }
您也可以考虑 Randal Schwartz 的 regex for JSON parsing。它并不能处理所有事情,但通常足以处理简单的事情。
我正在尝试将一个字符串与另一个字符串进行比较。
如果它是一个包含东西的 JSON 结构,我想打印 "contains things"。 如果它是一个 JSON 结构,不包含东西,我打印 "empty" 如果它不在大括号“{}”之间,我会打印出有错误。
这是我所做的:
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",然后打印 "empty",就像他应该对 "eq" 做的那样,然后抛出:
Argument "{}" isn't numeric in numeric eq (==)".
我可以使用 JSON 库,但我不喜欢。
感谢您的帮助!
比迪
对我有用。 $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
如果我在 {}
:
#!/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";
}
就是returns"Error",如果我把eq
换成==
,就是returnsempty
,因为"{}"
] 和 "{}\n"
在数值上为 0。如您所述,会引发警告。
您可以在处理之前尝试 chomp $content
。
我可能最终会把它拆散:
unless ($content) {print "Error\n"};
$content =~ /{(.*)}/
my $resp = ;
if ($resp) {
print "Contains Things ($resp)\n";
} else {
print "Empty\n";
}
顶层 JSON 东西可以是对象 ({...}
) 或数组 ([...]
),但您只检查其中之一。如果你只是想看看它是否为空,我会检查字符串的长度:
chomp $possible_json;
if( $length $possible_json >= 3 ) { ... }
您也可以考虑 Randal Schwartz 的 regex for JSON parsing。它并不能处理所有事情,但通常足以处理简单的事情。