为什么旁边另一个方括号的方括号被认为是一个单一字符?

时间:2015-08-18 13:04:35

标签: perl

my $str = "[[SELECT * FROM Personnel]]";

print substr($str, 0, 1); #that return [[ not [
print substr($str, 1, 6); #that return SELECT

拿两个方括号只有一个,这是我的html返回示例:

[[SELECT

[[是第一张照片。这个错误必须只有一个[SELECT是第二个印刷品

2 个答案:

答案 0 :(得分:3)

您的第一个打印声明仅打印[,您无法看到它,因为您没有打印换行符。您的第二个打印语句会输出[SELECT,这是您对substr的输入所期望的:

my $str = "[[SELECT * FROM Personnel]]";

print substr($str, 0, 1),"\n";
print substr($str, 1, 6),"\n";

输出:

[
[SELEC

答案 1 :(得分:3)

当我遇到这些问题时,我会解决问题并确保我有办法查看输出的每个部分来自哪里。我通过这个特殊问题的过程将会是这样的:

首先,摆脱程序的一部分,直到我不再看到问题。一旦我完成了这一点,我可能已经找到了引发问题的重点,因为它是我刚刚删除的那一部分。我会删除第二个输出语句。在这里,我使用Perl 5.10' say自动附加换行符:

#!/usr/bin/perl

use v5.10;

my $str = "[[SELECT * FROM Personnel]]";

say substr($str, 0, 1); #that return [[ not [

如果我执行该操作,我会发现输出语句不是加倍]

现在我把下一段代码放回去并继续这样做,直到我再次看到问题为止。我知道我已经删除了问题并且更接近问题了,但是现在是时候把它归结为导致它的语句。

在这种情况下,我有两个输出语句一起显示问题。我想看看每个语句的输出结果。在输出周围添加一些文本并对字符串进行编号可以向我显示哪个语句做了什么:

#!/usr/bin/perl

use v5.10;

my $str = "[[SELECT * FROM Personnel]]";

say "1. <" . substr($str, 0, 1) . ">"; 
say "2. <" . substr($str, 1, 6) . ">";

现在我看到每个say做了什么:

 1. <[>
 2. <[SELEC>