小编cow*_*god的帖子

如何在Perl中获取文件的上次修改时间?

假设我有一个文件句柄$fh.我可以检查它的存在-e $fh或其文件大小-s $fh一些关于该文件的其他信息.如何获得最后修改的时间戳?

perl file-io

63
推荐指数
5
解决办法
13万
查看次数

Perl是否有枚举类型?

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 enums

58
推荐指数
5
解决办法
4万
查看次数

散列键周围的引用是Perl中的一个好习惯吗?

在Perl中使用哈希时引用键是一个好主意吗?

我正在研究一个非常大的遗留Perl代码库,并试图采用Damian Conway在Perl最佳实践中提出的许多最佳实践.我知道最佳实践对于程序员来说总是一个敏感的话题,但希望我能在没有开始火焰战争的情况下得到一些好的答案.我也知道这可能是很多人不会争论的原因,因为它是一个小问题,但我正试图在我通过这个代码库工作时得到一个可靠的指南列表.

Damian ConwayPerl 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)

quotes perl hash

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

我应该使用命令行开关或pragma打开Perl警告吗?

开始Perl脚本时,下面两个例子之间有区别吗?如果是这样,我何时会使用一个而不是另一个?

例1:

#!/usr/bin/perl

use warnings;
Run Code Online (Sandbox Code Playgroud)

例2:

#!/usr/bin/perl -w
Run Code Online (Sandbox Code Playgroud)

perl warnings pragma

15
推荐指数
4
解决办法
4261
查看次数

对于子程序参数,Perl的移位与来自@_的赋值之间是否存在差异?

让我们暂时忽略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如另一个示例所示?欢迎有良好推理的意见.

parameters perl subroutine

15
推荐指数
3
解决办法
6083
查看次数

如何使用Perl获取文件大小(以兆字节为单位)?

我想以兆字节为单位获取磁盘上文件的大小.使用-s运算符给出了大小(以字节为单位),但我假设将其除以幻数是一个坏主意:

my $size_in_mb = (-s $fh) / (1024 * 1024);
Run Code Online (Sandbox Code Playgroud)

我应该只使用只读变量来定义1024,还是以编程方式获取千字节的字节数?

编辑:更新了错误的计算.

perl file-io filesize magic-numbers

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

有没有办法"使用"单个文件,而这个文件又在Perl中使用多个其他文件?

我想创建几个模块,这些模块将用于我项目中的几乎所有脚本和模块.这些可以在我的每个脚本中使用 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在我的每个脚本和模块中移动?

perl module

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

如何使用Perl提供大型文件供下载?

我需要提供一个大文件(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所示)或者有没有办法完成我在这里尝试做的事情?

perl file-io download

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

如何在Perl中提取压缩存档?

我需要允许用户通过网络表单上传zip文件.服务器正在运行带有Apache Web服务器的Linux.有没有使用像模块的优势档案::邮编提取该档案,或者我应该只执行一个系统调用unzip与反引号?

perl unzip archive

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

如何使用不同的浏览器测试我的网页?

我刚刚发现了Yahoo UI 重置CSS工具/文件,我在我的网站上使用它.在我的机器上,我有Internet Explorer 7和Firefox 3.01,我的网页在这两个浏览器上看起来是一样的.一位朋友正在使用Internet Explorer 6,页面完全一团糟.我有两个问题:

  1. 写作CSS时我是穷人/傻瓜吗?
  2. 如何在我的机器上使用不同的浏览器测试我的网页?

yui cross-browser css-reset

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