【问题标题】:Splitting a Sequence with / in Perl在 Perl 中用 / 分割序列
【发布时间】:2012-01-05 07:31:40
【问题描述】:

我有一个如下所示的序列:

my $seq = "D\IKLR\LK/Q";

我想做的是将序列分解成单个字母。

所以我希望得到:

my $var = ['D', '\', 'I', 'K', 'L', 'R', '\', 'L', 'K','/' ,'Q'];

但是为什么这不行:

 my @chars = split(//,$seq);
 print Dumper \@chars;

它给了这个:

my $var = ['D', '\\', 'I', 'K', 'L', 'R', '\\', 'L', 'K', 'Q'];

正确的做法是什么?

【问题讨论】:

  • 如果在$seq 的赋值中使用双引号,perl 会认为\I\L 是转义符并将它们视为单个字符。由于您没有发生这种情况,因此我假设此数据来自文件句柄。另外,您从数据转储中排除 / 是否是错字?
  • 如果你写my $seq = "D\IKLR\LK/Q";,那么$seq包含反斜杠字符。双引号字符串中的反斜杠被解释。 "\I" 没有明确的含义,但似乎简化为字母 "I"。您为$seq 显示的字符串有一个反斜杠和一个正斜杠,但您的@chars 数组有两个反斜杠。我认为您没有向我们展示您的实际代码。

标签: arrays perl split


【解决方案1】:

你得到的正是你想要的。

表示单个\ 的方式是'\\' 而不是'\',因为'\' 中的\ 转义了第二个',使得字符串不完整,但Data::Dumper 返回值总是可以evaled,因为它是 Perl 代码。

但是通过循环打印数组的各个元素将打印\

【讨论】:

  • 值得澄清的是,Data::Dumper 将数据结构打印为 Perl 代码,可以通过 evaled 对结构进行反序列化。如果您要直接打印 @chars 中的值,您会看到单个 \`'s that you expect. (Heheh - I had to type \\\` 来显示它。我必须输入 `\\\\\\\\` 才能让 that 出现...)
  • friedo,使用双反引号逃脱,比靠牙签容易得多,请参阅Markdown syntax。这类似于 POD 分隔符的多个角度:C<< method->call >>
  • 你真的应该提到OP可以简单地使用单引号
猜你喜欢
  • 2014-12-30
  • 1970-01-01
  • 2011-10-03
  • 1970-01-01
  • 1970-01-01
  • 2012-08-20
  • 2017-10-26
  • 2012-10-06
  • 1970-01-01
相关资源
最近更新 更多