相关疑难解决方法(0)

我和Perl之间的区别是什么?

我知道myPerl中有什么.它定义了一个仅存在于定义它的块范围内的变量.怎么our办?有our什么不同my

perl scope

184
推荐指数
7
解决办法
11万
查看次数

为什么我对包子的本地化重新定义没有生效?

鉴于以下Perl计划:

package Foo;
use strict;
use warnings;

sub new {
    my ($class) = @_;
    return bless {}, $class;
}

sub c {
    print "IN ORIG C\n";
}

sub DESTROY {
    print "IN DESTROY\n";
    c();
}

1;

package main;
use strict;
use warnings;
no warnings qw/redefine once/;

local *Foo::c = sub { print "IN MY C\n" };
my $f = Foo->new();
undef $f;
Run Code Online (Sandbox Code Playgroud)

我期望输出为:

IN DESTROY
IN MY C
Run Code Online (Sandbox Code Playgroud)

但我实际得到的输出为:

IN DESTROY
IN ORIG C
Run Code Online (Sandbox Code Playgroud)

问:为什么我的本地化重新定义Foo::c没有生效?

perl

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

Perl中正确的变量声明方式

我有一组3或4个单独的Perl脚本,它们曾经是一个简单的管道的一部分,但我现在试图将它们组合在一个脚本中以便于使用(现在没有子程序功能).问题是在不同的脚本中定义了几个具有相同名称的变量.我找到的解决方法是给这些变量赋予不同的名称,但它可能开始变得混乱,并且可能不是这样做的正确方法.我知道全局和局部变量的概念,但我不太明白它们是如何工作的.

处理这类变量有什么经验法则吗?您是否知道任何可以对变量范围有所了解或有任何建议的好文档?

谢谢.

编辑:我已经使用"使用警告;使用严格;" 并使用"my"声明变量.问题实际上可能与范围块的定义以及如何使它们彼此独立有关...

variables perl scope

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

Perl中的包变量不在"范围"中?

我正在看这个问题,当我在玩耍时,我遇到了这个问题:

#! /usr/bin/env perl
#
# use warnings;
use strict;
use feature qw(say);

{
    our $foo = "bar";
    say "Foo = $foo";
}

say "Foo = $foo";  # This is line #12
Run Code Online (Sandbox Code Playgroud)

是的,我确实use warnings;关掉了......

当我运行这个时,我得到:

Variable "$foo" is not imported at ./test.pl line 12.
Global symbol "$foo" requires explicit package name at ./test.pl line 12.
Execution of ./test.pl aborted due to compilation errors.
Run Code Online (Sandbox Code Playgroud)

嗯...我得到相同的" 变量"$ foo"不会导入./test.pl第12行. "如果我已经完成错误my $foo = "bar";.我使用时会理解这一点,my因为$foo一旦离开块就没有变量.但是, …

perl perlvar

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

在Perl中,如何将变量的声明提取到包装脚本中?

背景

我有一个perl脚本,称为main.pl,在清晰的情况下,当前处于多个分支状态,如下所示:

分支1:

my %hash
my $variable = "a"
my $variable2 = "c"

sub codeIsOtherwiseTheSame()
....
Run Code Online (Sandbox Code Playgroud)

分支2:

my %hash2
my $variable = "b"

sub codeIsOtherwiseTheSame()
....
Run Code Online (Sandbox Code Playgroud)

分公司3

my %hash
my $variable2 = "d"

sub codeIsOtherwiseTheSame()
....
Run Code Online (Sandbox Code Playgroud)

现在,脚本的每个分支都具有相同的代码。唯一的区别是声明的变量的种类及其初始化值是什么。我要做的是将这些不同的变量提取到包装脚本中(对于每个变体),这样就不必更改主脚本了。我这样做是因为有几个用户将使用此脚本,但是根据他们的用例,它们之间只有很小的差异。因此,我希望每种用户都有自己的简化界面。同时,我希望主脚本在被调用后仍能意识到这些变量。以下是我想要的示例:

所需解决方案

包装脚本1:

 my %hash;
 my $variable = "a";
 my $variable2 = "c";
 system("main.pl");
Run Code Online (Sandbox Code Playgroud)

包装脚本2:

 my %hash2;
 my $variable = "b";
 system("main.pl");
Run Code Online (Sandbox Code Playgroud)

包装脚本3:

my %hash;
my $variable2 = "d";
system("main.pl");
Run Code Online (Sandbox Code Playgroud)

Main.pl

sub codeIsOtherwiseTheSame()
Run Code Online (Sandbox Code Playgroud)

如何提取包装器脚本以获得上面想要的组织和行为?

perl wrapper

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

如何在 perl 中创建静态变量,以便我可以从另一个脚本访问

我有一个脚本 ( A.pl) 和一个包 ( B.pm),我想在其中创建一个静态变量,B.pm以便A.pl.

A.pl

use lib 'path/to/B_Package';

for loop 10 times {
  fun(age);
}
if ($count>0) {
  print "script fails";
}
Run Code Online (Sandbox Code Playgroud)

下午

package B {
  fun() {
    my $age_given = shift;
    my $count;

    eval {
      result = someFileHandling;
    } or die {
      $count++; 
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

perl

0
推荐指数
1
解决办法
141
查看次数

标签 统计

perl ×6

scope ×2

perlvar ×1

variables ×1

wrapper ×1