假设我有一个文件句柄$fh.我可以检查它的存在-e $fh或其文件大小-s $fh或一些关于该文件的其他信息.如何获得最后修改的时间戳?
Perl是否具有遵循最佳实践的枚举类型,或者更重要的是,它是否需要一个?
我正在工作的项目使用遍布各处的字符串来表示通常在C#等语言中使用Enum的内容.例如,我们在一组哈希中有一组电话号码,每个电话号码与电话类型("主页","工作","移动"等)相关联:
$phone_number->{type} = 'Home';
Run Code Online (Sandbox Code Playgroud)
在这里使用只读变量集还是使用Enum是否足够?我enum在CPAN上找到了一个模块,但似乎使用了违反Perl最佳实践之一的单词.我对使用只读变量的想法是这样的:
use Readonly;
Readonly my $HOME => 'Home';
Readonly my $WORK => 'Work';
Readonly my $MOBILE => 'Mobile';
$phone_number->{type} = $HOME;
Run Code Online (Sandbox Code Playgroud)
这是一个好方法还是有更好的方法?
在Perl中使用哈希时引用键是一个好主意吗?
我正在研究一个非常大的遗留Perl代码库,并试图采用Damian Conway在Perl最佳实践中提出的许多最佳实践.我知道最佳实践对于程序员来说总是一个敏感的话题,但希望我能在没有开始火焰战争的情况下得到一些好的答案.我也知道这可能是很多人不会争论的原因,因为它是一个小问题,但我正试图在我通过这个代码库工作时得到一个可靠的指南列表.
在Damian Conway的Perl Best Practices一书中,有一个例子展示了对齐如何帮助一段代码的易读性,但它没有提及(我可以找到书中的任何地方)引用哈希键的任何内容.
$ident{ name } = standardize_name($name);
$ident{ age } = time - $birth_date;
$ident{ status } = 'active';
Run Code Online (Sandbox Code Playgroud)
这不是更好用引号来写,以强调你没有使用裸言?
$ident{ 'name' } = standardize_name($name);
$ident{ 'age' } = time - $birth_date;
$ident{ 'status' } = 'active';
Run Code Online (Sandbox Code Playgroud) 开始Perl脚本时,下面两个例子之间有区别吗?如果是这样,我何时会使用一个而不是另一个?
例1:
#!/usr/bin/perl
use warnings;
Run Code Online (Sandbox Code Playgroud)
例2:
#!/usr/bin/perl -w
Run Code Online (Sandbox Code Playgroud) 让我们暂时忽略Damian Conway对任何给定子程序不超过三个位置参数的最佳实践.
以下两个示例在性能或功能方面有什么区别吗?
使用shift:
sub do_something_fantastical {
my $foo = shift;
my $bar = shift;
my $baz = shift;
my $qux = shift;
my $quux = shift;
my $corge = shift;
}
Run Code Online (Sandbox Code Playgroud)
使用@_:
sub do_something_fantastical {
my ($foo, $bar, $baz, $qux, $quux, $corge) = @_;
}
Run Code Online (Sandbox Code Playgroud)
如果两个示例在性能和功能方面相同,那么人们对一种格式的看法是什么?显然,使用的示例@_是更少的代码行,但使用它是否更清晰,shift如另一个示例所示?欢迎有良好推理的意见.
我想以兆字节为单位获取磁盘上文件的大小.使用-s运算符给出了大小(以字节为单位),但我假设将其除以幻数是一个坏主意:
my $size_in_mb = (-s $fh) / (1024 * 1024);
Run Code Online (Sandbox Code Playgroud)
我应该只使用只读变量来定义1024,还是以编程方式获取千字节的字节数?
编辑:更新了错误的计算.
我想创建几个模块,这些模块将用于我项目中的几乎所有脚本和模块.这些可以在我的每个脚本中使用 d,如下所示:
#!/usr/bin/perl
use Foo::Bar;
use Foo::Baz;
use Foo::Qux;
use Foo::Quux;
# Potentially many more.
Run Code Online (Sandbox Code Playgroud)
是否可以将所有这些use语句移动到一个新模块Foo::Corge,然后只需要use Foo::Corge在我的每个脚本和模块中移动?
我需要提供一个大文件(500+ MB),以便从Web服务器无法访问的位置下载.我发现了使用PHP提供大文件的问题,这与我的情况相同,但我使用的是Perl而不是PHP.
我尝试逐行打印文件,但这不会导致浏览器在抓取整个文件之前提示下载:
use Tie::File;
open my $fh, '<', '/path/to/file.txt';
tie my @file, 'Tie::File', $fh
or die 'Could not open file: $!';
my $size_in_bytes = -s $fh;
print "Content-type: text/plain\n";
print "Content-Length: $size_in_bytes\n";
print "Content-Disposition: attachment; filename=file.txt\n\n";
for my $line (@file) {
print $line;
}
untie @file;
close $fh;
exit;
Run Code Online (Sandbox Code Playgroud)
Perl是否具有与PHP的readfile()功能相同的功能(如PHP所示)或者有没有办法完成我在这里尝试做的事情?
我需要允许用户通过网络表单上传zip文件.服务器正在运行带有Apache Web服务器的Linux.有没有使用像模块的优势档案::邮编提取该档案,或者我应该只执行一个系统调用unzip与反引号?
我刚刚发现了Yahoo UI 重置CSS工具/文件,我在我的网站上使用它.在我的机器上,我有Internet Explorer 7和Firefox 3.01,我的网页在这两个浏览器上看起来是一样的.一位朋友正在使用Internet Explorer 6,页面完全一团糟.我有两个问题: