小编sid*_*com的帖子

避免"数字eq(==)中不是数字"的最佳方法 - 警告

#!/usr/bin/env perl
use warnings;
use 5.12.2;

my $c = 'f'; # could be a number too

if ( $c eq 'd' || $c == 9 ) {
    say "Hello, world!";
} 
Run Code Online (Sandbox Code Playgroud)

什么是最好的方法,避免'参数'f"在./perl.pl第7行的数字eq(==)中不是数字.' - 警告?
我想在这种情况下我可以使用"eq"两次,但这看起来不太好.

perl warnings equality operators

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

我怎么能抓住"Unicode非角色"警告?

我怎么能抓住"Unicode非字符0xffff是非法的交换" - 警告?

#!/usr/bin/env perl
use warnings;
use 5.012;
use Try::Tiny;

use warnings FATAL => qw(all);

my $character;

try {
    $character = "\x{ffff}";
} catch {
    die "---------- caught error ----------\n";
};

say "something";
Run Code Online (Sandbox Code Playgroud)

输出:

# Unicode non-character 0xffff is illegal for interchange at ./perl1.pl line 11.
Run Code Online (Sandbox Code Playgroud)

unicode perl warnings character try-catch

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

如何判断使用的模块是纯粹的perl?

如果我有use许多模块的Perl代码,是否有一种快速简便的方法来确定这些模块是否不是纯粹的Perl模块?

perl module

7
推荐指数
2
解决办法
649
查看次数

SQLite:检查表是否超过x行的最快方法

检查SQLite表是否超过100,000行的最快方法是什么?


测试表有26列和200,000,000行.

SELECT COUNT(*) FROM ( SELECT * FROM table LIMIT 100001 )
Run Code Online (Sandbox Code Playgroud)

花了0.27秒.

以下三个需要12分半钟

SELECT COUNT(*) FROM table
SELECT COUNT(*) FROM table LIMIT 100001
SELECT CASE WHEN COUNT(Id) >= 100000 THEN 1 ELSE 0 END FROM table
Run Code Online (Sandbox Code Playgroud)

sql sqlite

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

Perl 6和打印列

还包括Perl 6拥有的东西等同的Unicode :: GCStringcolumns方法是什么?

Perl 5示例:

#!/usr/bin/env perl
use warnings;
use strict;
use 5.10.0;
use utf8;
use open qw( :std :utf8 );
use Unicode::GCString;

my $s = '?'; # U+5408

say length $s;      # 1

my $gcs = Unicode::GCString->new( $s );
say $gcs->columns;  # 2
Run Code Online (Sandbox Code Playgroud)

perl perl6

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

Perl6:getc处于原始模式

我正在使用Perl 6模块Term :: termios.

#!/usr/bin/env perl6
use v6;
use Term::termios;

my $saved_termios := Term::termios.new(fd => 1).getattr;
my $termios := Term::termios.new(fd => 1).getattr;
$termios.makeraw;
$termios.setattr(:DRAIN);

loop {
   my $c = $*IN.getc;
   print "got: " ~ $c.ord ~ "\r\n";
   last if $c eq 'q';
}

$saved_termios.setattr(:DRAIN);
Run Code Online (Sandbox Code Playgroud)

当我运行此脚本,按键up-arrow,down-arrow,right-arrow,left-arrowq这是输出:

#after arrow-up:
got: 27
got: 91

#after arrow-down:
got: 65
got: 27
got: 91

#after arrow-right:
got: 66
got: 27
got: 91

#after …
Run Code Online (Sandbox Code Playgroud)

terminal perl perl6 getc

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

Perl6:将数组推送到具有一个元素的数组数组似乎不能按预期工作

当我将数组推送到一个有一个数组作为唯一元素的数组数组时,为什么会得到这种数据结构呢?

use v6;

my @d = ( [ 1 .. 3 ] );
@d.push( [ 4 .. 6 ] );
@d.push( [ 7 .. 9 ] );


for @d -> $r {
    say "$r[]";
}
# 1
# 2
# 3
# 4 5 6
# 7 8 9

say @d.perl;
# [1, 2, 3, [4, 5, 6], [7, 8, 9]]
Run Code Online (Sandbox Code Playgroud)

arrays perl6

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

承诺 - 开始 - 等待:输出订单

返回的值的顺序是否await始终相对于输入顺序?

my @aoa = (
    qw<1 a>, qw<2 b>, qw<3 c>,
    qw<4 d>, qw<5 e>, qw<6 f>,
    qw<7 g>, qw<8 h>, qw<9 i>,
);

my @portions = ( ( 0, 2 ), ( 3, 5 ), ( 6, 8 ) );
my @promise;
for @portions -> $range {
    @promise.push: start {
        do for $range[0] .. $range[1] -> $row {
            do for ^@aoa.[$row] -> $col {
                my $str = @aoa[$row][$col] // '';
                $row, $col, $str;
            }
        }
    };
} …
Run Code Online (Sandbox Code Playgroud)

perl6 promise output

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

如何使保存在变量“ $ = pod”中的pod行为?

是否可以将pod代码转换为保存在变量中的方式,使其$=pod与pod2text一起使用时的行为类似于?

#!/usr/bin/env perl6
use v6;
use Pod::To::Text;

my $code = $*PROGRAM.slurp;
my $pod = $code.subst( / ^ .+ \n <?before '=begin pod'> /, '' );

# convert $pod so it works with pod2text like $=pod does

say pod2text $pod;
say "==============";
say pod2text $=pod;

=begin pod

=head1 NAME

Test pod

=head1 DESCRIPTION

This is a test.

=end pod
Run Code Online (Sandbox Code Playgroud)

pod perl6

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

如何指定返回的数组类型?

sub a { my @c = 1, 2, 3, 4;     return @c };
sub b { my $d = [ 1, 2, 3, 4 ]; return $d };

say a().WHAT; # (Array)
say b().WHAT; # (Array)

my @e = a();
my @f = b();

say @e;     # [1 2 3 4]
say @e[1];  # 2

say @f;     # [[1 2 3 4]]
say @f[1];  # (Any)

# valid raku code, no errors messages
Run Code Online (Sandbox Code Playgroud)

这些子例程都返回一个数组,但返回的数组行为不同。在文档中明确子例程返回哪种数组类型的正确表达式是什么?

sub b ( --> Array ) …
Run Code Online (Sandbox Code Playgroud)

arrays documentation raku

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