根据我的理解,Perl传统上只包含核心功能,人们安装额外的库来做各种有用的(有时是非常基本的)事情.但是在某些时候,默认情况下会出现Perl附带的"核心库" - 因此您可以使用这些库而无需安装它们.
来自Python我很好奇这是如何管理的.特别:
例如,通过去当时间上search.cpan.org ::高分辨率文件,有没有在页面本身现在模块为核心的Perl发行版的一部分一些指示?我知道,我通常能找到了一些google搜索,但我想知道是否有更简单的方法.
是否可以使用Perl核心模块在未来的"任意"日期进行时区转换?
让我们说我有日:月:年,小时:分时区X(假设它是一个完全合格的时区,如America/New_York),我需要将其转换为时区Y(比如亚洲/加尔各答)
一些说明:
1)这适用于OSX(Lion或以上)
2)我知道如何使用DateTime和DateManip,但这些不是核心模块,并且需要安装C编译器.我正在尝试将我的程序分发给"非技术"用户 - 他们可以在帮助下进行perl模块安装,但在尝试使用XCode,命令行工具等工作时会崩溃.有些人试图安装DateTime,但他们陷入了错误/依赖关系并放弃了.
3)我尝试使用tzset的组合; 和ENV TZ - 但不能用于任意日期 - 仅适用于当地时间(这意味着,我可以将'现在时间'转换为任何时区)
我正在尝试使用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';
?例如...
任何见解都表示赞赏.
我有错误:
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)
为什么第二次修复不起作用?
最近,我问了一个关于调试seg错误的问题:在Perl中调试seg错误有哪些好的方法或步骤?.有人提到Symbol有一些深刻的XS魔法.
我想知道我是否可以找到Perl核心模块的错误历史记录.我尝试查看CPAN,但更改文档保留在项目级别而不是模块级别.
看,我们运行Perl 5.8.2和Symbol v1.05,我只是想知道我们的一个问题是否与该版本和当前版本之间发生的错误修正有关.
为什么我不必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) 我知道我可以很容易地做类似的事情
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)
哪个有效,但不适用于核心功能.
谢谢.