小编FMc*_*FMc的帖子

当设置Perl代码作为脚本或模块运行时,__PACKAGE__的原因是什么?

在这个早期的Stackoverflow问题中,特别是brian d foy的"脚本如何成为一个模块"我已经阅读了如何设置代码,以便它可以作为脚本或模块运行,使用这种技术:

package SomeModule;

__PACKAGE__->run(@ARGV) unless caller();

sub run {
    # Do stuff here if you are running the file as
    # a script rather than a module.
}
Run Code Online (Sandbox Code Playgroud)

__PACKAGE__这个设置的目的是什么?为什么不这样做呢?

run(@ARGV) unless caller();
Run Code Online (Sandbox Code Playgroud)

perl module

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

如何让Perl的ref()函数返回REF,IO和LVALUE?

ref()的文档提到了几个可能的返回值.我明白了其中大部分,但不是REF,IOLVALUE.我如何编写Perl代码ref以返回这些值?

在阅读了关于typeglobs和文件句柄的文档后,我接近了IO这段代码:

open(INPUT, '<', 'foo.pl');
print ref(*INPUT{IO}), "\n";  # Prints IO::Handle
Run Code Online (Sandbox Code Playgroud)

因为REFLVALUE我尝试了几个奇怪的结构,但没有成功.

perl types

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

如何让Perl的Spreadsheet :: WriteExcel用VLOOKUP创建公式?

我在使用Spreadsheet :: WriteExcel和公式方面遇到了困难VLOOKUP.以下测试脚本使用一些数据填充工作表并尝试创建VLOOKUP公式.当我打开生成的Excel文件时,公式结果显示为#VALUE!.如果我手动编辑任何包含公式的单元格(按F2然后只输入ENTER而不更改任何内容),我可以让Excel正确评估公式.知道出了什么问题吗?

对于它的价值,如果我在OpenOffice中打开相同的文件,公式工作正常.

use strict;
use warnings;
use Spreadsheet::WriteExcel;

my $wb = Spreadsheet::WriteExcel->new('foo.xls');
my $ws = $wb->add_worksheet;

for my $r (0 .. 9){
    for my $c (0 .. 4){
        $ws->write($r, $c, $r * 10 + $c);
    }
    $ws->write($r, 10, $r * 10);
    my $formula = sprintf('=VLOOKUP(K%s, A1:B10, 2, FALSE)', $r + 1);
    $ws->write( $r, 11, $formula );
    # $ws->write_formula( $r, 11, $formula ); # Does not help either.
}
Run Code Online (Sandbox Code Playgroud)

版本信息:

  • Excel …

excel perl

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

查找最接近数组平均值的元素

做以下事情的"红宝石"方式是什么?我仍然在考虑更多命令式的风格编程,而不是真正适应红宝石的思考.我想要做的是找到与数组平均值最接近的元素,例如,考虑以下数组

[1,2,3] 
Run Code Online (Sandbox Code Playgroud)

平均值是2.0.我想写的方法返回最接近平均值的元素,在这种情况下是1和3.

另一个例子将更好地说明这一点

[10,20,50,33,22] avg is 27.0 method would return 22 and 33.
Run Code Online (Sandbox Code Playgroud)

ruby arrays algorithm average

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

MooseX :: AttributeHelpers和MooseX :: FollowPBP是否正确交互?

以下代码定义了两个类(DeckADeckB),它们的区别仅在于它们是否使用MooseX :: AttributeHelpers附带的功能.Moose生成的吸气剂DeckB不是我的预期.这是一个错误还是我误解了MooseX :: AttributeHelpersMooseX :: FollowPBP应该如何互动?

我现在的解决方法是避免is在这种情况下使用参数,而是声明a readerwriter根据需要.

use strict;
use warnings;

my %moose_args = (
    isa     => 'ArrayRef[Str]',
    is      => 'ro',
    default => sub {[]},
);

my %moose_attr_helper_args = (
    metaclass => 'Collection::Array',
    provides => {
        elements => 'get_all_cards',
    },
);

package DeckA;
use Moose;
use MooseX::FollowPBP;
use MooseX::AttributeHelpers;
has 'cards' => (%moose_args);

package DeckB;
use Moose;
use MooseX::FollowPBP;
use MooseX::AttributeHelpers; …
Run Code Online (Sandbox Code Playgroud)

perl moose

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

'%p'和'my%p'之间的区别?

% %p = ('option1' => 'Option 1', 
% 'option2' => 'Option 2', 
% 'option3' => 'Option 3'
% );
    <select name="killer_feature" id="killer_feature" class="select">
% foreach (keys %p) {
% my $selected = param('killer_feature') && param('killer_feature') eq $_ ? 'selected="selected"' : '';
% if (!param('killer_feature') && $_ eq 'option2') { $selected = 'selected="selected"' }
    <option value=" <%=$_%>" <%= $selected %>>
        <%= $p{$_} %>
    </option>
% }
    </select>
Run Code Online (Sandbox Code Playgroud)

上面的代码通过返回'内部服务器错误'来破坏应用程序,但是如果我轻松编辑第一行% my %p(我试过它,因为其他一些控件都有这种格式)它可以工作,我想知道两者之间的区别.

它是一个基于Mojolicious Web框架的perl应用程序.

非常感谢!

perl mojo mojolicious

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

Perl foreach对哈希键的复杂性

这段代码的复杂性是什么?

foreach $var (keys %varset) { 
  print "${var}\n";
}
Run Code Online (Sandbox Code Playgroud)

是O(n ^ 2)还是O(n),也就是说,每次迭代还是只调用一次键操作?

perl complexity-theory

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

如何将Perl散列哈希转换为更灵活的数据结构?

在一个快速而肮脏的Perl脚本中,我有一个这样的数据结构:

$tax_revenue{YEAR}{STATE}{GOVLEV}{TAX} = integer
Run Code Online (Sandbox Code Playgroud)

哈希键假设这样的值:

YEAR: 1900 .. 2000
STATE: AK, AL, ... WY
GOVLEV: state, local
TAX: type of tax (income, sales, etc.)
Run Code Online (Sandbox Code Playgroud)

此外,散列键是唯一的.例如,TAX参数的值不会与另一个其他参数的值冲突.

我正在开始使用这些数据的中型项目,我想以更灵活的方式实现数据结构.我不知道我还需要的所有数据检索功能,但这里有一些例子:

# Specify the parameters in any order.
Tax_rev( qw(1902 WY state property) );
Tax_rev( qw(state property 1902 WY) );

# Use named parameters.
Tax_rev(year => 1902, state => 'WY', govlev => 'state', tax => 'property');

# Use wildcards to obtain a list of values.
# For example, state property tax revenue in …
Run Code Online (Sandbox Code Playgroud)

oop perl data-structures

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

在Perl中,/ ^ /和/ ^/m之间有区别吗?

perlre中/m选项的文档说明了这一点:

将字符串视为多行.也就是说,更改"^"和"$"以匹配字符串的开头或结尾,以匹配字符串中任何位置的任何行的开头或结尾.

但是这个例子似乎表明了这一点/^/并且/^/m行为方式相同.我有什么误会?

use strict;
no warnings; # Ignore warning about implicit split to @_
my $x = " \n \n ";
print scalar(split /^/m, $x), scalar(split /$/m, $x), "\n";  # 33
print scalar(split /^/,  $x), scalar(split /$/,  $x), "\n";  # 31
Run Code Online (Sandbox Code Playgroud)

regex perl

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

如何从Perl中以逗号分隔的字符串中提取单词?

我有一条线:

$myline = 'ca,cb,cc,cd,ce';
Run Code Online (Sandbox Code Playgroud)

我需要将ca匹配到$ 1,将cb匹配到$ 2等等.

不幸

$myline =~ /(?:(\w+),?)+/;
Run Code Online (Sandbox Code Playgroud)

不起作用.使用pcretest,它只将'ce'与$ 1 匹配.怎么做对了?我是否需要将其置于while循环中?

谢谢!

regex perl pcre

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