使用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)
是否可以在一个属性中包含所有四个(当前,默认,最小,最大)?
可以将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) 我可以像这样宣布与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) 我想将一个数组定义为一个类的属性,并在实例化类时用一些数据填充它.
我认为可以使用$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?
我想写一个用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)