Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
String perl中的用户输入是数字还是字符串?_String_Perl_Command Line - Fatal编程技术网

String 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新手。当我在命令提示符下输入一个数字时,脚本中的变量将其作为一个数字。
如何使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:谢谢你解决了这个问题。我本想回来收拾的,但却分心了。