覆盖变量

时间:2016-03-07 12:44:01

标签: perl

我还处于Perl的早期阶段,如果这很明显就道歉。

我在Perl中声明了一个变量,如下所示:

my $new_filename = 'nope';

现在如果满足某个条件(假设它在这里),我试图重新分配$new_filename的值,如下所示:

my $new_filename = "$common::conf{'html_dir'}/images/banners/$lc_prodid.$filetype";

我是他们将值分配给表:

my $sql_query = qq(INSERT INTO banner_image (link, title, active, imageloc, rank) VALUES ('$link_text','$banner_text','$active','$new_filename','$new_rank'));

我遇到的问题$new_filename在数据库中始终显示为“nope”。有人可以建议为什么会这样吗?

由于

2 个答案:

答案 0 :(得分:7)

关键字my用于声明变量。这意味着它将告诉Perl有关给定scope中的新变量。你只需要这样做一次。声明变量后,您可以根据需要分配

my $foo = 'foo';
$foo = 'bar';

但这不是唯一的问题。

  

现在如果满足某个条件(假设它在这里),我试图重新分配

这可能如下所示:

my $foo = 'foo';
if ( $bar ) {
  my $foo = 'bar';
}

现在,您在<{1>之后的那些大括号中的范围声明了$foo的新词汇版本 }}。您不会覆盖外部范围中的现有if。这就是价值不变的原因。

以下是一些提示/摘要:

  • 在必要的最小范围内声明变量
  • 尽可能晚地声明变量
  • 不要宣布变量两次

答案 1 :(得分:2)

如果您要分配:

Key.create(Profile.class, userId)

在if子句内部然后它是if语句范围的本地并且不会覆盖在外面声明的变量,你需要在第二个assingment中省略my