包含数字的字符串的算术运算

时间:2019-07-30 08:53:30

标签: perl

用Perlish处理包含数字的字符串的算术方法是什么?

示例:说我正在处理用->“ 120px”之类的字符串表示的字体大小。我知道字体大小的值将始终以数字字符和非数字字符后的格式进行格式化,并且我知道Perl将以算术方式截断字符串的任何尾随字符,因此我可以执行以下操作(带有适当的注释)吗?

#! /usr/bin/env perl

use warnings;
use strict;
use utf8;

use constant FONT_UNIT => 4; 

my $font_size = "120px";

STDOUT->print("${font_size}\n");

$font_size = do {no warnings; $font_size + FONT_UNIT}."px";

STDOUT->print("${font_size}\n");

exit (0);

我问,因为这种语言的功能在这里确实有效。

3 个答案:

答案 0 :(得分:6)

是的,您的方法似乎还可以。您还可以在评估中使用替换:

$font_size =~ s/([0-9]+)/$1 + FONT_UNIT/e;

或者,如果您需要清晰说明,只需提取数字,更改它,然后将零件粘回去即可:

my ($size, $unit) = $font_size =~ /([0-9]+)(.*)/;
$size += FONT_UNIT;
STDOUT->say("$size$unit");

答案 1 :(得分:2)

我要提出的唯一两个建议是,要更精确地确定要关闭的警告,并使用稍大的裸代码块使其更具可读性。

#! /usr/bin/env perl

use warnings;
use strict;
use utf8;

use constant FONT_UNIT => 4; 

my $font_size = "120px";

STDOUT->print("${font_size}\n");

{
  no warnings 'numeric';

  $font_size = $font_size + FONT_UNIT . "px";
}

STDOUT->print("${font_size}\n");

exit (0);

答案 2 :(得分:1)

  

用Perlish处理包含数字的字符串的算术方法是什么?

前导空格和尾随空格将被忽略(不生成警告)。

countinfinfinity,除去空格后不区分大小写,并且带有可选的前导+或-,被视为那些特殊数字(不生成警告)。 / p>

nan(不允许有多余的空格)被视为数字0(不生成警告)。

任何看起来像是整数或十进制数字且带有可选的e或E以及可选的带符号的指数的前导字符都被视为该数字(在一定程度上可以以数字类型表示)。如果此后仍然有任何非空白字符,则会生成“不是数字”警告。