只是想知道为什么@b表现得像全局,每次调用子程序时都必须重置.我的(变量)不应该超过例程,但这个是持久的.第一次迭代可以工作,但是后续的迭代会在没有for循环设置为0的情况下被破坏.
另外,@ b没有响应; 打印加入(); @ B =(0)X @ $一个; 映射; 或者对它的任何其他调用,除了直接查询$ b(#)之外什么都没有.不可能是Perl盔甲的缝隙,不是吗?
是的,如果我注释掉第一次迭代和for循环,第二次迭代会起作用,但后续的迭代不起作用.
sub firstDupe {
my ($a) = @_;
my @b;
# need for next line inexplicable, @b acts like global, ideas?
my $l = scalar(@{$a})+1; for ($i=0; $i < $l; $i++){ $b{$i}='0'; }
for (@{$a}){
return int($_) if $b{$_}++;
}
return -1;
}
my @pb= (2, 1, 3, 5, 3, 2);
$val=&firstDupe(\@pb);
my $ret="\nRet: $val";
@pb= (2, 4, 3, 5, 1);
$val=&firstDupe(\@pb);
$ret = $ret.", $val";
@pb= (1); …Run Code Online (Sandbox Code Playgroud) 好吧,十年来第一次使用Perl,有点生疏.从那时起思考也许是一些更新(天才吧?)
Alrighty,这是Perl 5,版本16,颠覆3 x86_64-linux-thread-multi,在AWS micro上有29个已注册的补丁.
Perl附带了它,我只是安装了perl-CGI perl-Data-Dumper
#!/usr/bin/perl
use CGI; # load cgi routines
my $q = CGI>new; # cgi object
print $q->header(),
$q->start_html("Hello World"),
$q->h1('Hello'),
$q->end_html;
~
Run Code Online (Sandbox Code Playgroud)
当我逐步构建程序时,似乎有一个简单而直截了当的可能性.但是如果我在命令行(或浏览器)运行它,我会遇到错误.
如果没有创建第4行的包或对象引用,则无法调用方法"header".
第4行是打印$ q-> header(); "create"是文件名.
有任何想法吗?让我了解Perl 2017的最新消息?生锈的问题总是非常简单.