String perl中的用户输入是数字还是字符串?
我是perl新手。当我在命令提示符下输入一个数字时,脚本中的变量将其作为一个数字。String perl中的用户输入是数字还是字符串?,string,perl,command-line,String,Perl,Command Line,我是perl新手。当我在命令提示符下输入一个数字时,脚本中的变量将其作为一个数字。 如何使perl将用户输入的数字作为字符串? 我只想检查用户是否输入了字符串“1”,而不是数字1? 我编写的代码如下: #!usr/bin/perl use strict; use warnings; print 'enter'; $a=<>; if($a==1) { print 'Number entered'; } elsif($a eq "1") { print 'Text entered'; }
如何使perl将用户输入的数字作为字符串?
我只想检查用户是否输入了字符串“1”,而不是数字1? 我编写的代码如下:
#!usr/bin/perl
use strict;
use warnings;
print 'enter';
$a=<>;
if($a==1)
{
print 'Number entered';
}
elsif($a eq "1")
{
print 'Text entered';
}
#!usr/bin/perl
严格使用;
使用警告;
打印“回车”;
$a=;
如果($a==1)
{
打印“输入的号码”;
}
elsif(等式“1”)
{
打印“输入的文本”;
}
来自文件或控制台的输入始终是字符串。您可以检查该字符串是否包含除数字字符以外的任何内容,但您必须考虑输入数字的含义
Perl标量变量以字符串和数字的形式同时交换。但是对于字符串,您必须得到完全正确的比较。字符串开头或结尾的额外空格将阻止它按预期进行匹配
本程序演示
use strict;
use warnings;
my $aa = '1';
my $bb = 2;
my $cc = '3 ';
print $aa == 1 ? 'match' : 'no match', "\n";
print $aa eq '1' ? 'match' : 'no match', "\n";
print $bb == 2 ? 'match' : 'no match', "\n";
print $bb eq '2' ? 'match' : 'no match', "\n";
print $cc == 3 ? 'match' : 'no match', "\n";
print $cc eq '3' ? 'match' : 'no match', "\n";
输出
match
match
match
match
match
no match
因此,Perl很高兴地说,'3'
在数字上等于3
,但由于后面的空格,它与字符串'3'
不同
这就是你的情况。您在$a
中输入的值类似于“42\n”
,Perl很乐意为您将其转换为数字42
。但是如果将它与字符串'42'
进行比较,则它是不同的,因为它有一个尾随的换行符
当您从文件读取输入时,尤其是从控制台读取输入时,几乎总是希望使用chomp
您还应该适当地缩进代码,使其更具可读性
更新 是一个非常有用的工具,可以准确地查看字符串中的内容以及字符串比较不起作用的原因。(甚至更好,但它不是核心模块,您可能需要安装它。) 如果我运行这个程序
use strict;
use warnings;
use Data::Dumper;
$Data::Dumper::Useqq = 1;
my $input = <>;
print Dumper $input;
chomp $input;
print Dumper $input;
这使得尾随的新行很明显
注意必须将
$Data::Dumper::Useqq
设置为真值。否则,输出比简单的打印
要好一点,从文件或控制台输入的总是字符串。您可以检查该字符串是否包含除数字字符以外的任何内容,但您必须考虑输入数字的含义
Perl标量变量以字符串和数字的形式同时交换。但是对于字符串,您必须得到完全正确的比较。字符串开头或结尾的额外空格将阻止它按预期进行匹配
本程序演示
use strict;
use warnings;
my $aa = '1';
my $bb = 2;
my $cc = '3 ';
print $aa == 1 ? 'match' : 'no match', "\n";
print $aa eq '1' ? 'match' : 'no match', "\n";
print $bb == 2 ? 'match' : 'no match', "\n";
print $bb eq '2' ? 'match' : 'no match', "\n";
print $cc == 3 ? 'match' : 'no match', "\n";
print $cc eq '3' ? 'match' : 'no match', "\n";
输出
match
match
match
match
match
no match
因此,Perl很高兴地说,'3'
在数字上等于3
,但由于后面的空格,它与字符串'3'
不同
这就是你的情况。您在$a
中输入的值类似于“42\n”
,Perl很乐意为您将其转换为数字42
。但是如果将它与字符串'42'
进行比较,则它是不同的,因为它有一个尾随的换行符
当您从文件读取输入时,尤其是从控制台读取输入时,几乎总是希望使用chomp
您还应该适当地缩进代码,使其更具可读性
更新 是一个非常有用的工具,可以准确地查看字符串中的内容以及字符串比较不起作用的原因。(甚至更好,但它不是核心模块,您可能需要安装它。) 如果我运行这个程序
use strict;
use warnings;
use Data::Dumper;
$Data::Dumper::Useqq = 1;
my $input = <>;
print Dumper $input;
chomp $input;
print Dumper $input;
这使得尾随的新行很明显
注意必须将
$Data::Dumper::Useqq
设置为真值。否则,输出比简单的打印好一点
描述以数字形式输入1
的过程与以字符串形式输入1
的过程有何不同;但由于Perl是一种动态类型化的语言,因此根据上下文将值强制转换为不同的类型。假设您从命令行将一个值读入变量$a
。如果您将$a+=1
,$a
现在将是2
,但是如果您将某个东西连接到$a.='STRING'
,$a
将不是1STRING
。这一切都取决于上下文。因此,在上面的代码中,如果我希望结果是“文本输入”,我应该对代码做什么更改??从文件或控制台输入总是一个字符串。您可以检查该字符串是否包含除数字字符以外的任何内容,但您必须考虑输入数字的含义。请描述将1
作为数字输入的过程与将1
作为字符串输入的过程有何不同。通常输入为文本;但由于Perl是一种动态类型化的语言,因此根据上下文将值强制转换为不同的类型。假设您从命令行将一个值读入变量$a
。如果您将$a+=1
,$a
现在将是2
,但是如果您将某个东西连接到$a.='STRING'
,$a
将不是1STRING
。这一切都取决于上下文。因此,在上面的代码中,如果我希望结果是“文本输入”,我应该对代码做什么更改??从文件或控制台输入总是一个字符串。您可以检查该字符串是否包含除数字字符以外的任何内容,但您必须考虑输入数字的含义。谢谢。我使用chomp函数尝试了另一个版本的代码,现在它可以工作了:):@quirry:我很高兴你能让它按你想要的方式工作。Data::Dumper
模块可用于准确查看变量中的内容。我在回答中添加了解释。@Miller:谢谢你解决了这个问题。我本想回来收拾的,但却分心了。