我正在研究用Perl编写的会计脚本,我想知道执行十进制算术计算的"正确"方法是什么.例如,我想确保像这样的比较正常工作:
"0.1" + "0.1" + "0.1" == "0.3"
"258.9" * "2000" == "517800"
...
Run Code Online (Sandbox Code Playgroud)
在Python中我会使用Decimal值的类型,但我在Perl中做什么?
什么是标量".."运算符的典型用法?它只是选择文本块吗?
我自己有趣的例子:
sub get_next {
print scalar($$..!$$), "\n";
}
get_next for 1 .. 5; # prints numbers from 1 to 5
get_next for 1 .. 5; # prints numbers from 6 to 10
Run Code Online (Sandbox Code Playgroud) 可能重复:
有人可以解释这个Javascript方法吗?
(x = [].reverse)() === window // true
Run Code Online (Sandbox Code Playgroud)
知道为什么吗?
我正在使用sort我编写的定制比较子程序:
sub special_compare {
# calc something using $a and $b
# return value
}
my @sorted = sort special_compare @list;
Run Code Online (Sandbox Code Playgroud)
我知道它是最好用的$a,$b它是自动设置的,但有时我想让我special_compare得到更多的参数,即:
sub special_compare {
my ($a, $b, @more) = @_; # or maybe 'my @more = @_;' ?
# calc something using $a, $b and @more
# return value
}
Run Code Online (Sandbox Code Playgroud)
我怎样才能做到这一点?
考虑这两个用例:
sub test1 {
my $v = 1;
sub test2 { print $v }
# ...
}
Run Code Online (Sandbox Code Playgroud)
和
for (0..3) {
my $foo = $_;
sub test1 { print $foo }
# ...
}
Run Code Online (Sandbox Code Playgroud)
第一个产生Variable will not stay shared警告,而第二个产生警告.似乎在两种情况下都不共享该变量.为什么在第二种情况下没有任何警告?
我有一个使用CR/LF分隔记录的文件,但个别记录有时包含LF.
while (<$in>)
{
#extract record data
}
Run Code Online (Sandbox Code Playgroud)
我试图阅读上面的代码,这(正如我所料)分割只包含LF的记录.但是我希望重新分配$/可以解决这个问题,但它确实会导致我在一次迭代中读取完整的文件.
$/ = "\r\n";
while (<$in>)
{
#extract record data
}
Run Code Online (Sandbox Code Playgroud)
这里的任何人都可以提出有效的解决方案
我在Windows上使用Activestate Perl.
我对pylint有以下错误:
Pylint error W0232: class has no __init__ method
Run Code Online (Sandbox Code Playgroud)
我明白这意味着什么.我必须创建__init__方法.问题是这个类是从父类继承的.我知道我能够创建__init__方法并且只是使用super(myclass, self).__init__()但是它真的有必要吗?我没有什么可补充的__init__.我想知道__init__在任何类中创建方法是否更好.
Perl的正则表达式具有\K反斜杠序列:
\ K
这出现在perl 5.10.0中.左侧匹配的任何内容\K都不包含在内$&,如果在替换中使用该模式,则不会替换.这可以让你写s/PAT1 \K PAT2/REPL/x而不是s/(PAT1) PAT2/${1}REPL/x或s/(?<=PAT1) PAT2/REPL/x.助记:保持.
Python中有什么相同的东西吗?