【问题标题】:perl ord function in list context列表上下文中的 perl ord 函数
【发布时间】:2014-09-24 01:25:28
【问题描述】:

perl 中的ord 函数返回一个字符的数值。可以在列表上下文中调用该函数吗?具体来说,我想将一个字符串分解为它的数字字符值(例如,ABC --> 65, 66, 67)。但是,以下命令不会给出预期的结果:ord(split(//,$STRING))。我可以使用如下循环结构:

my @NUMERIC=();
for(my $i=0;$i<@STRING;$i++) {
  $NUMERIC[$i] = ord($STRING[$i]);
}

但如果可能的话,我想找到一种从函数中生成列表输出的单行解决方案。

【问题讨论】:

  • 在列表上下文中调用它和使用列表作为参数调用它是两件不同的事情。前者是可能的:无论上下文如何,它仍然返回一个标量。后者不是;它只需要一个标量作为参数。

标签: perl


【解决方案1】:

使用ord可以只确定单个字符的字符代码。要从字符串中获取代码列表,您可以同时使用 splitmap。像这样

my $s = 'STRING';
my @codes = map ord, split //, $s;
print "@codes\n";

输出

83 84 82 73 78 71

【讨论】:

  • 这正是我想要做的。谢谢。
【解决方案2】:

它不适用于列表,抱歉。​​

试试这个:

my $string = 'ABC';
my @numbers;

push @numbers, ord $_ for split '', $string;

【讨论】:

  • split '' 最好写成split // 以强调第一个参数是正则表达式
  • 谢谢,我不知道for 构造可以这样使用(没有明确的条件)。
  • 啊;我将s///// repeats last match 行为与m// 混淆,并想消除歧义。哦。
猜你喜欢
  • 2015-12-30
  • 2014-03-29
  • 2011-07-07
  • 1970-01-01
  • 2013-06-12
  • 1970-01-01
  • 2022-10-24
  • 2010-09-27
  • 2018-10-23
相关资源
最近更新 更多