小编cap*_*fan的帖子

Perl Moose属性具有最小值,最大值和默认值

使用Moose,可以创建具有默认值的属性.我有一组属性都具有最小值,最大值和默认值.它们是表示比例的属性(例如Tk :: Scale).

目前,我至少有3个属性:current和default:

has 'attr' => (is => 'rw', isa => 'Int', default => 300, lazy => 1, clearer => '_clear_attr');
Run Code Online (Sandbox Code Playgroud)

分钟:

has 'attr_min' => (is => 'rw', isa => Int', default => 100);
Run Code Online (Sandbox Code Playgroud)

最大:

has 'attr_max' => (is => 'rw', isa => Int', default => 1000);
Run Code Online (Sandbox Code Playgroud)

是否可以在一个属性中包含所有四个(当前,默认,最小,最大)?

perl attributes moose

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

Perl的IO :: File等效于open($ fh,“>:utf8”,$ path)是什么?

可以将utf-8文件编码为白色,如下所示:

open my $fh,">:utf8","/some/path" or die $!;
Run Code Online (Sandbox Code Playgroud)

如何使用IO :: File获得相同的结果,最好在1行中得到?我得到了这个,但是它做得一样吗,是否可以在1行中完成?

my $fh_out = IO::File->new($target_file, 'w');
$fh_out->binmode(':utf8');
Run Code Online (Sandbox Code Playgroud)

作为参考,脚本开始如下:

use 5.020;
use strict;
use warnings;
use utf8;
# code here
Run Code Online (Sandbox Code Playgroud)

perl utf-8

5
推荐指数
2
解决办法
822
查看次数

将属性重置为默认值

我可以像这样宣布与Moose的关系:

has 'attr' => (is => 'rw', isa => 'Int', default => 10);
Run Code Online (Sandbox Code Playgroud)

是否可以将此值重置为默认值?

例:

$obj->attr(5); # sets attr to 5
$obj->_reset_attr;
print $obj->attr; # will print 10
Run Code Online (Sandbox Code Playgroud)

perl attributes moose

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

Moose数组属性:我如何使用set方法?

我想将一个数组定义为一个类的属性,并在实例化类时用一些数据填充它.

我认为可以使用$self->attribute->set($id, $value)方法来设置给定索引上的元素.至少这是我从Moose 文档中理解的内容.

但是,当我尝试

use Data::Dumper qw( Dumper );
use Moose;

has cells => (
    is => 'rw',
    traits  => ['Array'],
    isa     => 'ArrayRef',
    default => sub { [] },
);

my $app = __PACKAGE__->new();
$app->cells->set($_, $_) for 0..3;
print(Dumper($app->cells));
Run Code Online (Sandbox Code Playgroud)

我明白了

Can't call method "set" on unblessed reference
Run Code Online (Sandbox Code Playgroud)

我该怎么办set

arrays perl moose traits

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

无法使用Text :: CSV_XS Perl模块编写UTF-16LE编码的CSV文件

我想写一个用UTF-16LE编码的CSV文件.但是,文件中的输出搞砸了.有一些奇怪的中文字母:਍挀攀氀氀㄀⸀㄀挀挀攀氀氀㄀⸀㈀ഀഀ.

这看起来像这里提到的逐字节问题:在Python for Windows Notepad中创建UTF-16换行符

关于Perl和Text :: CSV_XS的其他主题没有帮助.

这是我尝试的方式:

#!perl

use strict;
use warnings;
use utf8;
use Text::CSV_XS;

binmode STDOUT, ":utf8";

my $csv = Text::CSV_XS->new({
    binary => 1,
    sep_char => ";",
    quote_char => undef,
    eol => $/,
});

open my $in, '<:encoding(UTF-16LE)', 'in.csv' or die "in.csv: $!";
open my $out, '>:encoding(UTF-16LE)', 'out.csv' or die "out.csv: $!";

while (my $row = $csv->getline($in)) {
    $_ =~ s/ä/æ/ for @$row; # something will be done to the data...
    $csv->print($out, $row);
}


close …
Run Code Online (Sandbox Code Playgroud)

csv perl encoding

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

标签 统计

perl ×5

moose ×3

attributes ×2

arrays ×1

csv ×1

encoding ×1

traits ×1

utf-8 ×1