Perl if 语句,If value = nothing do 语句 if value = something do 语句

Posted

技术标签:

【中文标题】Perl if 语句,If value = nothing do 语句 if value = something do 语句【英文标题】:Perl if statement, If value = nothing do statement if value = something do statement 【发布时间】:2015-02-06 01:32:17 【问题描述】:

我正在尝试将文本框中的值插入到 SQL 表中。虽然当我将文本框留空时,它会添加一个空白值,这会导致其余的表单功能不起作用。

我希望if 语句检查 $animal 是否为空白,什么也不做。如果 $animal 里面有东西,那么执行插入到表中。

我不太确定该放什么。

if ($animal = " ") 

else
    if ($animal = "???") 
        insertTable("INSERT INTO $table(name) VALUE ('".$animal."')");

第 24 - 27 行是这个

sub insertTable 
    $statement = shift (@_);
    $dbh->do($statement);
  # sub

【问题讨论】:

= 是赋值运算符,它将返回右侧参数的值(在您的情况下为 " ""???")。你想要== use strict; use warnings; 会警告您在条件中使用赋值。这只是它们是一个非常好的主意的原因之一。 【参考方案1】:

Perl 使用标量变量,这是非常通用的小东西。他们的问题之一是他们的“真实性”并不总是显而易见的。

如果您使用布尔测试来测试标量,则如果:

未定义。 这是一个字符串。 是数字 0。 是字符串“0”。

(如果数组未定义没有元素,则数组测试为假。)

所以正确的答案是 - 要么使用defined 来检查值是否已定义。或者使用正则表达式来匹配“有效”值。

例如

if ( $animal =~ m/\w+/ ) 
    # Do something

\w+ 是 Perl 正则表达式,用于表示“一个或多个单词字符”,它是字母数字和下划线。所以你的空字符串、只有空格的字符串或未定义的字符串都不会匹配这个模式。

【讨论】:

当我尝试插入表格时,在 html 表单中按下提交后,我现在收到此错误:DBD::mysql::db do failed: Unknown column 'snake' in 'field list' at J:/xampp/htdocs/webprog/cal/recordAnimalsMass.pl 第 26 行。 这不是 perl 错误。为了解决我们需要更多代码的问题。【参考方案2】:

这里有很多问题。解决其中最糟糕的问题:

    您使用的是=,它用于分配,而不是比较。使用== 比较数字,使用eq 比较字符串。 您将变量与单个空格进行比较。 $animal 中不太可能出现单个空格字符。你会想做一些更简单(if ($animal) ... )或更复杂(也许是if ($animal =~ /\w/) ... )的事情。 您将用户输入直接插入到 SQL 中,然后针对您的数据库运行该 SQL。这导致SQL injection attacks。在 SQL 中使用绑定点要好得多。

【讨论】:

use strict; use warnings 将解决第 1 点。这表明 OP 没有打开这些模式。 Found = in conditional, should be == at line 5.【参考方案3】:

在 Perl 中没有空值,只有未定义!

if (defined $value)

  # Do that

else

  # Do this

【讨论】:

undef 空值。 Perl 只是有一个不同的名称。

以上是关于Perl if 语句,If value = nothing do 语句 if value = something do 语句的主要内容,如果未能解决你的问题,请参考以下文章

将两个 if 语句合并为一个的 Perl 单行器

python中的if not 怎么用

如何在 Ember Handlebars 中使用 if 语句实现 not?

Perl的do语句块结构

如何在 JavaScript -JQuery 中否定“if”语句块中的代码,例如“if not then ..”

为啥这个 IF NOT EXISTS 语句不行?