加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

perl 字符串操作

发布时间:2020-12-15 21:06:39 所属栏目:大数据 来源:网络整理
导读:字符串数组元素赋值:@tmp=qw(aaa bbb kkk 9000);相当于@tmp= (“aaa”,“bbb”,“kkk”,“9000); ? ? 字符串比较,绝不能用==? ?,要用eq [macg@localhost perltest]$ vi tip.pl #!/usr/bin/perl print"input:"; while(chomp($input=)) { print"your input i
字符串数组元素赋值:@tmp=qw(aaa bbb kkk 9000);相当于@tmp= (“aaa”,“bbb”,“kkk”,“9000);


? ? 字符串比较,绝不能用==??,要用eq
[macg@localhost perltest]$ vi tip.pl

#!/usr/bin/perl
print"input:";
while(chomp($input=<>)) {
print"your input is $input n";
if ($input=="q") { print "choose q n";last;}
??elsif ($input=='n') {print "input is?$input n";next;}
??????else { print "input ok,try againn";}
print "input:";
??}
[macg@localhost perltest]$ ./tip.pl
input:x
your input is x
choose q

字符串用==是最常犯的错误
??即使是整形,也尽量用eq,少用==
while(chomp($input=<STDIN>))
?{
?for($i=1,$found=0;$i<=$int_num;$i++)
??{
???if ($input==$i) { $found=1;}
?????????else
Do you want to change eth0:2 's ip address ??回车

Argument "" isn't numeric in numeric eq (==) at ./address.pl line 77,<STDIN> line 2.
整形变量$input==$i,如果$input是回车,并不走else,而是报错

正确的做法是:????不论整形字符串,都用eq
while(chomp( $input=<STDIN> ))
{
for($i=1,$found=0;$i<=$int_num;$i++)
?{
?if ( $input eq $i ) { $found=1;}
?}
which interface you want to config ? choice a number 1 2 3 4 q:1
Do you want to change eth0 's ip address ?
字符串几种连接运算符
,运算符 常用于输出
print? "純金 ",$v1;
$str,"nn";
.运算符 和,类似 也是字符串相加 但,通常只用于print 而.可以用在任何字符串相加的地方
print '12345 大家來跳舞' . " hello world";
結果變成:
12345 大家來跳舞 hello world
x运算符号
print "OK" x 4;
OKOKOKOK
为什么字符串相加只能用.??不能用+
因为可能+就是 真加 (数字相加) ,而不是字符串合并
$v1 = 99;
$v2 = '121';

print $v1 + $v2; $v1 = 99;
$v2 = '121';

print $v2 . $v1; 220 12199
字符串的连接可以连接整形和字符形,整形也被当作字符型处理,没有printf里的%d问题
$min=1;

$date="date "."0".$min;
print $date,"n";
? [root@ntracker mac]# ./tip.pl
date 01
uc???轉成大寫,lc轉成小寫
$str="abCD99e";
$str = uc($str); $str="abCD99e";
$str = lc($str); [macg@localhost perltest]$ ./tip.pl
ABCD99E???? [macg@localhost perltest]$ ./tip.pl
abcd99e
?? length取串长(字符数量)
#!/usr/bin/perl
$str="abCD99e";
$strlen=length($str);
print $strlen,"n"; [macg@localhost perltest]$ ./tip.pl
7
substr??串,位置,长度??????-------??取子串,注意从0开始数位置
#!/usr/bin/perl
$str = "ABCDEFG1234567";
$a = substr $str,5;
print $a,sans-serif; line-height:18px"> [macg@localhost perltest]$ ./tip.pl
ABCDE??
$a = substr $str,?-4,2;?
????????????????从倒数第4个开始,取两个字符 [macg@localhost perltest]$ ./tip.pl
45
index?????????在字串中找尋某一子字串的起始位置
#!/usr/bin/perl
$str = "ABCDEFG1234567";
$a = "12";?????????????
$pos=index($str,$a);
print $pos,"n"; @数组=split (pattern,串)??????????将字符串用某模式分成多个单词
#!/usr/bin/perl
$str = "ABCDEi FG12i 345 6 7";
@array=split(/ /,$str);按空格分
foreach (@array) {
?????print $_,"n";
}??? [macg@localhost perltest]$ ./tip.pl
ABCDEi
FG12i
345
6
7
@array = split (/ +/,$line);????当一行中各单词间的空格多于一个时
空格和TAB混杂情况下的 split
[macg@localhost perltest]$ vi tip.pl

#!/usr/bin/perl
$str = "ABCDEi FG12i?????345 6 7";
@array=split(/t /,$str);
foreach (@array) {
?????print $_,"n";
} [macg@localhost perltest]$ ./tip.pl
ABCDEi FG12i
345 6 7 只分了两份,为什么?
因为同时满足TAB和空格的只有一处
所以必须加[ ]
@array=split(/[t?]/,$str);?????现在才是真正的按空格和TAB分 [macg@localhost perltest]$ ./tip.pl
ABCDEi
FG12i

345
6
7 但还是有缺陷,TAB和空格相连时,TAB被认为是空格划分的子串,或者空格被认为是TAB划分的子串
用join定义字符串数组格式符号(缺省是,)??必须与qw( )合用
语法:join($string,@array)
@array=qw(one two three); $total="one,two,three"; @array=qw(one two three);
$total=join("",@array);? $total="onetwothree";
数组内grep
@array=("one","on","in");
$count =grep(/on/,@array);
查询结果赋值给单变量 @result=grep(/on/,@array);
查询结果赋值给数组 2 one on

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
    站长推荐
    热点阅读