标签: bareword

Python中的单词/新关键字

我想看看是否有可能定义新的关键字,或者在用Python讨论Ruby时,在WAT的Destroy All Software谈话中调用它们.

我想出了一个我在其他地方找不到的答案,所以我决定在StackOverflow上分享它的问答风格.

python keyword bareword

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

为什么有些用户在Perl中引用类名?

看一下Type::Tiny,我看到对的调用中的类名在Type::Tiny->new官方文档中被引用,

my $NUM = "Type::Tiny"->new(
   name       => "Number",
   constraint => sub { looks_like_number($_) },
   message    => sub { "$_ ain't a number" },
);
Run Code Online (Sandbox Code Playgroud)

为什么是这样?这仅仅是样式吗?这种做法是否会对性能产生影响?

perl coding-style classname bareword

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

为什么Perl open()文档使用两种不同的FILEHANDLE样式?

open函数文档显示open()as 的语法:

  • 打开FILEHANDLE,EXPR
  • 打开FILEHANDLE,MODE,EXPR
  • 打开FILEHANDLE,MODE,EXPR,LIST
  • 打开FILEHANDLE,MODE,REFERENCE
  • 打开FILEHANDLE

在示例中,它们具有正常的$ -prefixed变量用于文件句柄的位置:

open(my $fh, "<", "input.txt")
Run Code Online (Sandbox Code Playgroud)

以及使用裸字的示例:

open(FOO, "|tr '[a-z]' '[A-Z]'");
Run Code Online (Sandbox Code Playgroud)

一个问题是每个样式的名称是什么,在每种情况下"我正在使用_ _作为文件句柄"?另一种是,为什么他们开始使用裸字open()文档中?它似乎是后来的用途都不涉及正常的文件名open().在这些情况下,$ -prefixed表单是不可接受的吗?

perl filehandle bareword

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

perl s/this/that/r ==>"Bareword发现运营商的预期"

Perl文档推荐这个:

$foo = $bar =~ s/this/that/r;
Run Code Online (Sandbox Code Playgroud)

但是,我收到此错误:

Bareword found where operator expected near
    "s/this/that/r" (#1)
Run Code Online (Sandbox Code Playgroud)

这是r修饰符特有的,没有代码可以工作.但是,我不想修改$bar.当然,我可以替换

my $foo = $bar =~ s/this/that/r;
Run Code Online (Sandbox Code Playgroud)

my $foo = $bar;
$foo =~ s/this/that/;
Run Code Online (Sandbox Code Playgroud)

有更好的解决方案吗?

perl bareword

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

为什么在“use”行上允许使用前导连字符选项而不使用粗逗号而严格?

为什么下面的use行是合法的 Perl 语法?(改编自父级POD ;在 Cygwin 上的 Perl 5.26.2 x64 上进行测试。)

package MyHash;
use strict;
use Tie::Hash;
use parent -norequire, "Tie::StdHash";
       #   ^^^^^^^^^^ A bareword with nothing to protect it!
Run Code Online (Sandbox Code Playgroud)

在 下-MO=Deparse,该use行变为

use parent ('-norequire', 'Tie::StdHash');
Run Code Online (Sandbox Code Playgroud)

但我无法从use文档中看出 引用的来源-norequire

  • 如果use strict不是强制的话,我会理解的。裸字norequire变成 string "norequire"一元减号将将该字符串变成"-bareword",并且生成的字符串将进入use导入列表。例如:

    package MyHash;
    use Tie::Hash;
    use parent -norequire, "Tie::StdHash";
    
    Run Code Online (Sandbox Code Playgroud)
  • 同样,如果有一个粗逗号,我也会理解。 -foo => bar变成"-foo", …

syntax perl punctuation bareword language-lawyer

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

为什么 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
查看次数

为什么在这个Perl示例中定义的sdf返回true?

我在Perl中尝试过这个例子.有人可以解释为什么这是真的吗?

  if (defined sdf)  {   print "true";  }
Run Code Online (Sandbox Code Playgroud)

它打印true.

sdf可以是任何名称.

另外,如果定义了sdf函数并且它返回0,则它不会打印任何内容.

print (sdf); 不打印sdf字符串但是

if (sdf eq "sdf")
{
 print "true";
}
Run Code Online (Sandbox Code Playgroud)

打印真实.

如果sdf是一个字符串,则相关问题仍然存在.什么不是印刷品?

perl strict bareword

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

为什么这个关于strict subs的错误只会在autodie下触发?

给定这样的代码,我不会收到任何警告。

use strict;
use warnings;
open STDERR, '>&', STDOUT;
Run Code Online (Sandbox Code Playgroud)

鉴于此代码,我收到一个致命错误。

use strict;
use warnings;
use autodie;
open STDERR, '>&', STDOUT;
Run Code Online (Sandbox Code Playgroud)

在 ./test.pl 第 6 行使用“strict subs”时不允许使用裸字“STDOUT”。由于编译错误,./test.pl 的执行中止。

为什么autodie将严格的 subs 指向这个错误的根源——在第一个例子中显然是严格的,而我没有错误。

随着diagnostics误差这样的解释..

在 ./test.pl 第 7 行使用“strict subs”时不允许使用裸字“STDOUT”。由于编译错误,./test.pl 的执行中止 (#1) (F) 使用“strict subs”时,a裸字只允许作为子程序标识符,在大括号中或在“=>”符号的左边。也许您需要预先声明一个子程序?

这都可以通过做来解决

open STDERR, '>&', *STDOUT;
Run Code Online (Sandbox Code Playgroud)

那么它不是一个裸字,但是为什么裸字是特殊的,没有autodie,而不是autodie?这里发生了其他事情吗?

perl warnings bareword

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

评估和使用的问题

我编写了这段代码,它在系统中安装POE模块时有效.

#!/usr/bin/perl

use strict;
use warnings;
use POE;

...
Run Code Online (Sandbox Code Playgroud)

但是我想确定这个模块是否存在:

#!/usr/bin/perl

use strict;
use warnings;
eval("use POE; 1") or die ('Please, install POE module. \n');

...
Run Code Online (Sandbox Code Playgroud)

它返回:

Bareword "KERNEL" not allowed while "strict subs" in use at ./terminalhero.perl line 58.
Bareword "HEAP" not allowed while "strict subs" in use at ./terminalhero.perl line 60.
Execution of ./terminalhero.perl aborted due to compilation errors.
Run Code Online (Sandbox Code Playgroud)

我尝试了其他模块,但也有错误.如何使用严格模式执行我想要的操作?

perl module strict detect bareword

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

在使用严格的subs时,不允许设置bareword环境变量

为了运行我的Perl脚本,我需要在OS上设置一个环境变量来指向我们的开发服务器:

export SERVER=DEV

但是,一旦将脚本分发给我们的用户,我不希望他们每次都需要导出此环境变量.因此,我想我会在我的脚本开头附近设置环境变量.所以我补充说:

$ENV{SERVER}=DEV;

但是,由于严格的subs,我的脚本不允许这样做:

Bareword "DEV" not allowed while "strict subs" in use

我的部门主管一定得到了保证我们必须在我们的脚本中使用strict,所以没有办法克服这个限制.有没有正确的方法来设置我忽略的裸字环境变量?

perl environment-variables bareword

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

在Perl中使用裸字有什么缺陷?

我理解裸字可以用作引用运算符(q //,qq //),哈希键等的字符串.我个人对此并不太兴奋,因为我无法克服心理上的期望应引用字符串,如C,C++中所示.但是,如果我采用引用字符串和裸字的混合使用,我想确保我不会意外地在脚中射击自己,在运行时裸字不能正常运行.

请排除"use strict"在编译时将其作为错误捕获的用例.我总是启用'严格'模式,所以我不关心这些情况.

以下是基于所提供的答案和评论的代码说明:

#!/usr/bin/perl

use strict;

use constant SIZE => "const_size";

sub size {
    return "getsize";
}

my $href = {
    size => 1,
    getsize => 2,
    const_size => "CONST_SIZE",
    SIZE => "LARGE",
};

print "constant SIZE:", SIZE, "\n";
print "1. \$href->{size}:", $href->{size}, "\n";
print "1a. \$href->{size()}:", $href->{size()}, "\n";
print "2. \$href->{getsize}:", $href->{getsize}, "\n";
print "3. \$href->{SIZE}:", $href->{SIZE}, "\n";
print "3a. \$href->{(SIZE)}:", $href->{(SIZE)}, "\n";
Run Code Online (Sandbox Code Playgroud)

输出:

$ ./bare_word.pl
constant SIZE:const_size
1. $href->{size}:1
1a. $href->{size()}:2
2. $href->{getsize}:2
3. $href->{SIZE}:LARGE …
Run Code Online (Sandbox Code Playgroud)

string quotes perl bareword

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

从严格的 pragma 中豁免一段 perl 代码

我有一段遗留的 perl 代码,它使用perl DBI和类似的结构

$db->bind_param(1, $some_blob, {TYPE => SQL_BLOB});
Run Code Online (Sandbox Code Playgroud)

其中 SQL_BLOB 是一个裸词。我想在同一个文件中使用严格的编译指示,但它会抱怨裸字。('在使用“严格的subs”时不允许使用裸字“SQL_BLOB”')我可以以某种方式免除此行的严格检查吗?

perl strict dbi bareword

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