小编n.r*_*.r.的帖子

打印$ /而不是\n是错误的吗?

Perl的文档说$/:

输入记录分隔符,默认为换行符.这影响了Perl关于"线"是什么的想法.

那么,基本上是错误的:

print STDERR $var, $/;
Run Code Online (Sandbox Code Playgroud)

代替:

print STDERR "$var\n";
Run Code Online (Sandbox Code Playgroud)

如果我做前者会出现什么问题?

perl newline

15
推荐指数
2
解决办法
748
查看次数

如何将下一个搜索开始位置倒数1?

如何将下一个搜索位置的开头倒数1?例如,假设我想匹配之间的所有数字#.以下将只给我奇数.

my $data="#1#2#3#4#";

while ( $data =~ /#(\d)#/g ) {
  print $1, "\n";
}
Run Code Online (Sandbox Code Playgroud)

但是如果我能够将下一个位置的开始倒数1,我会得到偶数和奇数.

这不起作用: pos() = pos() - 1;

我知道我可以用它完成这个任务split.但这不能回答我的问题.

for (split /#/, $data) {
  print $_, "\n";
}
Run Code Online (Sandbox Code Playgroud)

perl regex-lookarounds

8
推荐指数
2
解决办法
475
查看次数

如何匹配Unicode元音?

什么字符类或Unicode属性将匹配Perl 中的任何Unicode元音?

错误答案:[aeiouAEIOU].(这里的讲道,洗衣清单中的第24项)

perluniprops仅为Hangul和印度语脚本提及元音.

让我们抛开一个元音是什么的问题.是的,i在某些情况下可能不是元音.所以,任何可以作为元音的角色都可以.

perl character-class

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

反转按位左移和OR分配

对此有什么反函数?

A = (B << 3) | 0x07;
Run Code Online (Sandbox Code Playgroud)

B当我已经有相应的时候,我怎么能得到一个A

c c++ bit-manipulation bit-shift or-operator

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

如何重新定义\ s以匹配下划线?

\s用于空格的Perl(<v5.18)正则表达式字符类与[\t\n\f\r ].

现在,由于某些文件名使用下划线作为空格,我想知道是否可以重新定义\s(本地)以匹配除空格之外的下划线.

这仅仅是为了具有许多其他复杂的正则表达式的可读性[\s_].我可以这样做吗?如果是这样,怎么样?

regex perl character-class

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

chomp如何能够改变未通过引用传递的变量的值?

chomp似乎能够改变未通过引用传递的变量的值; 也就是说,语法chomp $var代替chomp \$var.

这怎么可能?我怎样才能在函数中模仿这种行为?

chomp:

my $var="foo\n";
chomp $var;
print $var
Run Code Online (Sandbox Code Playgroud)

mychomp:

my $var="foo\n";
mychomp(\$var);
print $var;

sub mychomp {
  my $ref=shift;
  $$ref=~s/\s+$//;
}
Run Code Online (Sandbox Code Playgroud)

perl

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

如何使所有继承的方法返回子类对象?

我正在编写一个hOCR::ElementHTML::Element来处理hOCR内容.因此,hOCR::Element该类中的对象继承了属于的所有方法HTML::Element.

但是由于有许多基本方法HTML::Element(例如find_by_tag_namelook_down)返回HTML::Element对象,我认为自己必须为每个这样的方法编写一个相应的hOCR::Element包装方法,它只是按照hOCR给出的方式将祝福映射为HTML.

例如:

package hOCR::Element;

use HTML::Element;
use parent 'HTML::Element';

sub new {
  my ($class, %params) = @_;
  my $self = $class->SUPER::new (%params);
  return bless $self, $class;
}

sub look_down { 
  my $self = shift;
  return map { bless $_, 'hOCR::Element' } $self->SUPER::look_down (@_);
}

1;
Run Code Online (Sandbox Code Playgroud)

我怎样才能让子类继承其基类中的所有方法,使得这些相关方法返回子类对象而不是基类对象,而不必为每个这样的父方法编写包装器?

oop perl inheritance

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

如何访问子例程返回的列表的最后一项而不先将其复制到数组中?

我正在寻找一种计算成本较低的方法来访问子例程返回的列表的最后一项(而不修改子例程本身)。

正如我所看到的,我在下面所做的实际上是将返回的列表复制到命名数组@list或匿名数组中[],然后访问该数组的最后一个值,而不是直接访问返回列表的最后一项。

这里有什么捷径吗?如何直接访问返回列表的最后一项?

sub range { return 0 .. 10**7 }
Run Code Online (Sandbox Code Playgroud)

根据 GNU ,这需要 0.808 秒的用户时间time

my @array = range();
print pop @array;
Run Code Online (Sandbox Code Playgroud)

这里是 0.792 秒:

my @array = range();
print $array[$#array], "\n"
Run Code Online (Sandbox Code Playgroud)

0.680 秒:

print pop [ range() ]
Run Code Online (Sandbox Code Playgroud)

arrays perl

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

为什么[^\w]匹配某些单词字符但不匹配[^\p {Word}]?

我写了一个Perl脚本,打印出与Unicode属性匹配的字符.到目前为止,它似乎适用于大多数房产.

但它打印出ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõöøùúûüýþ ÿ匹配的字符[^\w].这些字符应该匹配\w.奇怪的是,他们匹配\p{Word}.

我试过没有成功:

  • map { decode ( "UTF-8", $_ ) }
  • map { pack 'U0C*', unpack 'C*', $_ }

如何使[^\w]这些单词字符不匹配?

chars.pl

#!/usr/bin/perl

use warnings;
use strict;
use utf8;

binmode STDOUT, ':utf8';

my $c;
my $cols = 80;
my $arg = shift;
my $regex = qr/$arg/;

for ( map { chr } 0x20 .. 0xFFFF )
{
  next if /\p{Unassigned}|\p{NChar}|\p{Cs}/;

  if ( $_ =~ $regex )
  {
    print STDOUT;
    print …
Run Code Online (Sandbox Code Playgroud)

perl character-class

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

为什么 Perl 中连接运算符后面的裸字是字符串?

为什么 Perl(5.30.3 以及no feature ':all')假定连接运算符后面的裸字.是字符串?例如:

use v5.30;   # or: no feature ':all'; 
use strict;
use warnings;
my $k1 = 'a';
my $k2 = 'b';
print STDOUT $k1 . k2 . "\n";
Run Code Online (Sandbox Code Playgroud)

打印出来ak2ab是有意的),并且不会引发此处不允许使用裸字的例外情况。这是我的脚本中的一个错误,但不一定是 Perl 中的错误。

根据perlglossary,裸词是指“根据 ,其含义足够模糊,被视为非法的词use strict 'subs'”。然而,由于$k2之前定义了一个名为 name 的标量k2,所以我认为k2它已经足够模糊了。

奇怪的是,第二个裸字引发了异常:

use v5.30;   # or: no feature ':all';
use strict;
use warnings;
my $k1 = 'a';
my $k2 = 'b';
my $k3 …
Run Code Online (Sandbox Code Playgroud)

perl bareword

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