标签: perl-core

Perl的核心库是如何管理的?

根据我的理解,Perl传统上只包含核心功能,人们安装额外的库来做各种有用的(有时是非常基本的)事情.但是在某些时候,默认情况下会出现Perl附带的"核心库" - 因此您可以使用这些库而无需安装它们.

来自Python我很好奇这是如何管理的.特别:

  1. 如何选择图书馆?
  2. 图书馆是否仍有自己的版本号和发布时间表?
  3. 使用这些库时,您有什么样的向后兼容性保证?
  4. 在系统中升级或降级这些库是否常见?这是在系统范围内完成还是更具体?
  5. 如果存在需要更改API的错误修复,该怎么办?
  6. 如何将功能添加到这些核心库(如果有的话)?

perl perl-core

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

如何从模块的CPAN页面判断它是否在核心发行版中?

例如,通过去当时间上search.cpan.org ::高分辨率文件,有没有在页面本身现在模块为核心的Perl发行版的一部分一些指示?我知道,我通常能找到了一些google搜索,但我想知道是否有更简单的方法.

perl cpan perl-module perl-core

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

Perl时区转换 - 但仅使用核心模块

是否可以使用Perl核心模块在未来的"任意"日期进行时区转换?

让我们说我有日:月:年,小时:分时区X(假设它是一个完全合格的时区,如America/New_York),我需要将其转换为时区Y(比如亚洲/加尔各答)

一些说明:

1)这适用于OSX(Lion或以上)

2)我知道如何使用DateTime和DateManip,但这些不是核心模块,并且需要安装C编译器.我正在尝试将我的程序分发给"非技术"用户 - 他们可以在帮助下进行perl模块安装,但在尝试使用XCode,命令行工具等工作时会崩溃.有些人试图安装DateTime,但他们陷入了错误/依赖关系并放弃了.

3)我尝试使用tzset的组合; 和ENV TZ - 但不能用于任意日期 - 仅适用于当地时间(这意味着,我可以将'现在时间'转换为任何时区)

perl timezone perl-core

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

Perl"do",相对路径以"."开头.要么 ".."

我正在尝试使用Perl的do EXPR函数作为穷人的配置解析器,使用第二个.pl文件,它只返回一个列表作为配置信息.(我认为这可能是理想的用途do,尤其是因为我可以do or die在我的代码中写" ".这是一个例子:

main.pl

# Go read the config file
my %config = do './config.pl';

# do something with it
$web_object->login($config{username}, $config{password});
Run Code Online (Sandbox Code Playgroud)

config.pl

# Configuration file for main script
(
  username => "username",
  password => "none_of_your_business",
  favorite_color => "0x0000FF",
);
Run Code Online (Sandbox Code Playgroud)

阅读Perldocdo提供了很多关于相对路径的有用建议 - 搜索@INC和修改%INC,关于5.26不搜索"."的特殊警告.更多,等等.但它也有这些位:

#加载确切的指定文件(./和../ special-cased) ...


使用do与相对路径(./和../除外),如...

然后它实际上从来没有麻烦解释"./"或"../"的特殊情况路径处理 - 一个重要的遗漏!

所以我的问题是" 当你真正发生了什么"时的所有变化do './file.pl';?例如...

  • 虽然从@INC中删除了CWD,但这种语法是否仍然适用于5.26?
  • 从哪个角度看是"./":Perl二进制文件,执行的Perl脚本,来自用户shell的CWD,还是别的东西?
  • 是否存在安全隐患?
  • 这比修改@INC和使用基本文件名更好还是更差?

任何见解都表示赞赏.

perl perldoc perl5 perl-core

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

不明确的调用解析为CORE :: join(),符合条件或使用&at

我有错误:

Ambiguous call resolved as CORE::join(), qualify as such or use & at
Run Code Online (Sandbox Code Playgroud)

当我修复错误时:

$args =  CORE::join( ', ', @$args );
Run Code Online (Sandbox Code Playgroud)

一切正常.

但当我把它修复为:

$args =  &join( ', ', @$args );
Run Code Online (Sandbox Code Playgroud)

正如错误消息所示,我得到了不同的错误:

Can't locate object method "_make_instance" via package ", " (perhaps you forgot to load ", "?) at
Run Code Online (Sandbox Code Playgroud)

为什么第二次修复不起作用?

perl perl-core

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

如何检查Perl核心模块的错误历史记录?

最近,我问了一个关于调试seg错误的问题:在Perl中调试seg错误有哪些好的方法或步骤?.有人提到Symbol有一些深刻的XS魔法.

我想知道我是否可以找到Perl核心模块的错误历史记录.我尝试查看CPAN,但更改文档保留在项目级别而不是模块级别.

看,我们运行Perl 5.8.2和Symbol v1.05,我只是想知道我们的一个问题是否与该版本和当前版本之间发生的错误修正有关.

perl perl-core

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

为什么我不必对 atan2 等使用“使用 Math::Trig”?

为什么我不必use Math::Trig;在我的 Perl 程序中使用来调用atan2()

根据文档atan2()不是“Perl 核心”的一部分。

我有 Perl 5.18.4。我查看了标准 Perl 模块列表,我确实看到列出了 Math::Trig,但我仍然认为“use”语句是必需的。诚然,此时我的 Perl 知识只有大约 6 个月。因此,一个简单的答案是引用 Perl 官方文档。或者,也许这里还有其他我不明白的事情。

这是我正在谈论的一个例子。

#!/usr/bin/perl
use strict;
use warnings;
$value = atan2(1, 1) * 4;
print "$value\n";
Run Code Online (Sandbox Code Playgroud)

输出:

  3.14159265358979
Run Code Online (Sandbox Code Playgroud)

perl perl-core

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

是否可以象征性地引用Perl核心模块?

我知道我可以很容易地做类似的事情

sub sin {
    sin($_[0]);
}
Run Code Online (Sandbox Code Playgroud)

并象征性地引用我需要的每个函数,但我想知道是否有办法做类似的事情

{$foo}(123);
Run Code Online (Sandbox Code Playgroud)

&{$foo}(123);
Run Code Online (Sandbox Code Playgroud)

哪个有效,但不适用于核心功能.

谢谢.

perl function symbolic-references perl-core

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