首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在perl中,glob()是否仍存在不可预测的行为?

在perl中,glob()是否仍存在不可预测的行为?
EN

Stack Overflow用户
提问于 2012-10-10 08:27:49
回答 2查看 289关注 0票数 7

我在2000年的一个聊天板上引用的PerlFaq中找到了这段智慧。

glob()中有漏洞吗? 由于某些操作系统上的当前实现,在标量上下文中使用glob()函数或其角括号别名时,可能会导致泄漏和/或不可预测的行为。因此,最好只在列表上下文中使用glob()。

我读到这个问题是用Perl 5.6修复的,但后来听说5.10.1仍然会出现这个问题。

有没有人对最近的问题有过经验,在哪里能找到关于这个问题的明确答案?

晚点..。最新的PerlFAQ说:

5.18: glob()中有漏洞吗? (由brian d foy提供) 从Perl 5.6.0开始,"glob“是在内部实现的,而不是依赖外部资源。因此,"glob“的内存问题在现代perls中并不是一个问题。

=====

最后:所报告的问题是由于在给出所有匹配项之后循环中使用glob造成的误用。这没什么问题。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-10-11 09:46:16

使用源卢克和提交历史记录

http://perl5.git.perl.org/perl.git/history/HEAD:/ext/File-Glob

更新:当那个长期过时的perlfaq5项目在5.14中存在时,它却在最新版本中消失了

票数 5
EN

Stack Overflow用户

发布于 2016-05-21 19:24:04

我刚刚在Debian 上用Perl 5.14.2进行了测试。

标量上下文-不幸失败

代码语言:javascript
复制
sub test
{
    my $dir = shift;
    my $oldDir = cwd();

    chdir($dir) or die("Could not chdir() : $!");
    my $firstEntry = glob('*');
    print "$firstEntry\n";
    chdir($oldDir) or die("Could not chdir() : $!");    
}

# /tmp/test1 (contains file1 and file2)
test('/tmp/test1); # Display file1 which is expected

# /tmp/test2 (contains file3 and file4)
test('/tmp/test2'); # Display file2 which is not expected

列表上下文(按预期工作)

代码语言:javascript
复制
sub test
{
    my $dir = shift;
    my $oldDir = cwd();

    chdir($dir) or die("Could not chdir() : $!");
    (my $firstEntry) = glob('*');
    print "$firstEntry\n";
    chdir($oldDir) or die("Could not chdir() : $!");    
}

# /tmp/test1 (contains file1 and file2)
test('/tmp/test1); # Display file1 which is expected

# /tmp/test2 (contains file3 and file4)
test('/tmp/test2'); # Display file3 which is expected

为了在这里继续,glob buffer不会被刷新,即使我们超出了调用范围。

使用perl 5.22-1,这两种情况都可以正常工作(标量上下文)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12815091

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档