Perl 字符串截取函数substr

在编写perl程序的时候,我们有时需要截取一个字符串中的部分内容。

这个时候通常会使用substr函数实现这个功能。

函数参数:

substr(待截取字符串,截取起始位置,截取终了位置);

view plaincopy to clipboardprint?
$str="testtest";  
print substr($str,0,5); 
$str="testtest";
print substr($str,0,5);

运行上面的程序,输出结果"testt",这个是我们想要的结果。再看看下面的程序:

view plaincopy to clipboardprint?
$str="测试文本";  
print substr($str,0,1); 
$str="测试文本";
print substr($str,0,1);

这时候输出了一个"?",这显然不是我们想要的结果。因为在perl中,所有从外部输入的字符串(包括写在程序里的字符串)都会当成字节来处理,"print substr($str,0,1);"这句话只是把"测试文本"的第一个字节取出来,并且用print输出,然而单个字节是不能表示一个中文字符的,所以就输出了"?"。

如果想要上面的程序输出正确的结果,就需要使用decode函数把"测试文本"转换成perl内部字符串,让perl把"测试文本"当成字符串来处理,这样再用"substr($str,0,1);"截取的就不是一个字节,而是一个汉字。

view plaincopy to clipboardprint?
use Encode;  
$str=decode('gbk',"测试文本");  
print encode('gbk',substr($str,0,1)); 
use Encode;
$str=decode('gbk',"测试文本");
print encode('gbk',substr($str,0,1));

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值