小编Eri*_*ett的帖子

什么时候从perl中删除了-P选项?

-P选项何时从perl中删除的?

-P使您的脚本在Perl编译之前通过C预处理程序运行。(由于双方的意见和cpp指令以#字符开头,你应该避免启动与C预处理器,如确认的话评论ifelsedefine)。

我只是对它何时被移除感到好奇。

perl

7
推荐指数
1
解决办法
90
查看次数

Perl优化器问题:perl编译器会优化掉所有这些临时变量吗?

我有一个非常简单的算术,但为了可读性和正确性,我将它扩展为一堆临时变量.更容易阅读,更改和检查表达式的部分内容.

我的问题是,这段代码是否会因为它的扩展而受到运行时间的打击?我不知道perl编译器是如何工作的,但是在'C'中,这​​些额外(不完全)变量将被优化而不存在.

my $targetBasis = $$s{"basis"} * $nextBasisPct;
my $dollarsHeld = $$s{"basis"} * $$s{"held"};
my $targetDollars = $dollarsHeld + $opt{"buyDollars"};
my $targetShares = $targetDollars / $targetBasis;
my $newShares = $targetShares - $$s{"held"};
my $targetPrice = $opt{"buyDollars"} / $newShares;
Run Code Online (Sandbox Code Playgroud)

谢谢.

-E

我刚刚完成了从一个看起来很糟糕的衬里扩展这个,只是发现它是正确的.如果没有理由这样做,我宁愿不把它放回去.

optimization perl

5
推荐指数
3
解决办法
124
查看次数

设置$/="\ R"是否允许chomp()与perl中的大多数文件一起正常工作?

有没有人确切知道设置$/="\R";是否可靠让chomp()做正确的事情,即删除行上的任何行尾约定?

具体来说,我在Windows和UNIX上运行脚本,并且必须处理来自网络的文件,并且具有未知的行尾约定:MS-DOS,UNIX,MacOS <9,等等.

我最近偶然发现了"\ R",但我之前没见过.我认为这是新的.嗯,比Perl 5.006更新.(有一阵子了.)

"\ R"声称也会执行Unicode换行符.我没办法正确测试.

谢谢.

-Erik

我很惊讶地发现stackoverflow中实际上有一个"换行符"标记 .

regex perl newline

4
推荐指数
1
解决办法
102
查看次数

STDOUT是什么类型,如何选择写入?

STDOUT是否有“类型”?

printf STDERR ("STDOUT = %s\n", STDOUT);
printf STDERR ("\*STDOUT = %s\n", *STDOUT);
printf STDERR ("\\\*STDOUT = %s\n", \*STDOUT);
Run Code Online (Sandbox Code Playgroud)

产生:

STDOUT = STDOUT
*STDOUT = *main::STDOUT
\*STDOUT = GLOB(0x600078848)
Run Code Online (Sandbox Code Playgroud)

我了解*main::STDOUTGLOB(0x600078848)条目。这个“流行语”让我感到好奇。

我问是因为我想将类似文件句柄的参数传递给方法调用。在“ C”中,我将使用文件描述符或File *。我希望它默认为STDOUT。我所做的是:

$OUT_FILE_HANDLE = \*STDOUT;
if(@ARGV > 0 ) {
    open($OUT_FILE_HANDLE, ">", "$ARGV[0]") or die $!;
}
Run Code Online (Sandbox Code Playgroud)

它可以工作,但是我不知道我到底做了什么。我提升了STDOUT吗?我怀疑我已经“毁了”(覆盖)STDOUT,这不是我想要的。

请原谅复合问题;他们似乎有关。

perl stdout filehandle

4
推荐指数
2
解决办法
192
查看次数

如何创建perl别名?类型团?

假设我正在操作另一个包中的哈希,我想为该变量创建一个别名?干净的方法是什么?这个示例代码显示了我想要做的事情,但是它和它的十几种变化都出现了故障.

#!/usr/bin/perl
#use strict;  # I want it to work with strict.

my $p = Person->new("Joe");
my $name;
*name = \*$p->{"name"};     # Latest broken attempt

printf("'%s' should eq '%s' because they both point to the same place.\n",
       $name, $p->{"name"});

$name = "Sam";

printf("'%s' should eq '%s' because they both point to the same place.\n",
       $name, $p->{"name"});
exit 0;


package Person;

sub new {
    my $class = shift;

    my $this = {};
    bless $this, $class;

    $this->{"name"} = shift;

    return $this;
} …
Run Code Online (Sandbox Code Playgroud)

perl alias perl-module

1
推荐指数
1
解决办法
147
查看次数

我可以在perl的子例程中声明全局变量吗?

我可以在perl的子例程中声明全局变量use strict吗?

请考虑以下代码:

#!/usr/bin/perl
# $Id: foo,v 1.5 2019/02/21 10:41:08 bennett Exp bennett $

use strict;
use warnings;

initialize();

print "$lorem\n";

exit 0;

sub initialize {
    # How would one delcare "$lorem" here such that it is available as
    # a global?

    $lorem = <<_EOM_
    Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex …
Run Code Online (Sandbox Code Playgroud)

perl scope global-variables

1
推荐指数
1
解决办法
106
查看次数

我可以在 perl 中调用带有子类比较的超类排序吗?

我想使用使用子类比较函数的超类排序。我试图在以下代码中提炼问题的性质。这不是“生产”代码,而是在此处提供以供说明。它经过测试。

#!/usr/bin/perl
# $Id: foo,v 1.10 2019/02/23 14:14:33 bennett Exp bennett $

use strict;
use warnings;

package Fruit;
use Scalar::Util 'blessed';

sub new {
    my $class = shift;
    my $self = bless({}, $class);
    $self->{itemList} = [];
    warn "Called with class ", blessed $self, "\n";
    return $self;
}

package Apples;

use parent qw(-norequire Fruit);

sub mySort {
    my $self = shift;
    @{$self->{itemList}} = sort compare @{$self->{itemList}};
    return $self;
}

sub compare {
    $a->{mass} <=> $b->{mass};
}

package main;

my $apfel = …
Run Code Online (Sandbox Code Playgroud)

perl subclass subroutine superclass

1
推荐指数
1
解决办法
75
查看次数

Moose Variable names may not contain :: at

So I hit this weird error.

Variable names may not contain :: at .../perl5/lib/perl5/x86_64-cygwin-threads-multi/Class/MOP/Package.pm

The code that triggers it is:

override 'emitEvent::ENOTE::Final' => sub {
my ($self, $e) = @_;
my ($rval);

$rval = super();


return($rval);
};
Run Code Online (Sandbox Code Playgroud)

I found this link regarding a bug: http://codeverge.com/perl.perl5.porters/a-very-old-bug-in-safe.pm/2018166

Is this related?

If I take the '::' out, it goes away, but really messes with the way I've been naming things, so if there's a workaround, I'd appreciate it.

-E

perl perl-module moose

0
推荐指数
1
解决办法
50
查看次数