在Perl字符串中无法用L替换0并用H替换1

用户3791998

我只用简单的一段代码就无法解决我的问题。我想要做的就是用L代替0,用H代替1来代替十六进制数字的二进制值。我需要从用户那里获取十六进制数字,将其转换为二进制,扫描二进制的每一位,然后用L替换0,用H替换1。简单的要求却很难解决。

use warnings;
use strict;

my $i2c = "80";
my $binary_string = sprintf "%08b", hex($i2c);
print "$binary_string \n";

my $charz = sprintf "%s", $binary_string;
print "$charz\n";

for (my $i=1; $i < @charz; $i++) {
  if (substr($charz, $i) eq "0")
    substr($charz, $i) = "L";
  else if (substr($charz, $i) eq "1")
    substr($charz, $i) = "H";
}

我的输出应该是这样的:

input hex = 80 

因此二进制将是10000000所以我的输出必须是HLLLLLLL

我无法获得此简单输出。我尝试了各种各样的方法使其正常工作(正则表达式匹配并替换子字符串,索引等)。我不确定我是否在某个地方犯了基本错误。请帮助我解决这一问题。

我得到的错误是这样的:

syntax error at temp3.pl line 12, near ")
substr"
Execution of temp3.pl aborted due to compilation errors.
乔纳森·勒夫勒(Jonathan Leffler)

Perl的if语句总是需要{}周围的行动:

if (substr($charz, $i) eq "0")
{
    substr($charz, $i) = "L";
}
else if (substr($charz, $i) eq "1")
{
    substr($charz, $i) = "H";
}

(您可能还应该查看封闭的循环索引;除非您真的很想过着危险的生活,否则Perl中的数组索引从0开始索引。而且,正如TLP所评论的那样,在我们解构代码时,$charzvia的赋值sprintf是一种漫长的方法写作$charz = $binary_string;!)

另外,正如hobbs评论中指出的那样substr()操作员需要第三个参数才能按需工作:

if (substr($charz, $i, 1) eq "0")
{
    substr($charz, $i, 1) = "L";
}
else if (substr($charz, $i, 1) eq "1")
{
    substr($charz, $i, 1) = "H";
}

或者您可以使用:

substr($charz, $i, 1) = "L" if (substr($charz, $i, 1) eq "0");
substr($charz, $i, 1) = "H" if (substr($charz, $i, 1) eq "1");

或者,您可以避免显式循环并使用:

$charz =~ s/1/H/g;
$charz =~ s/0/L/g;

或者您可以使用:

$charz =~ y/01/LH/;

或者您可以将其拼写ytr

$charz =~ tr/01/LH/;

或您可以在Perl中完成的所有其他方式...

在所示的机制中,我将使用ytr(可能tr是首选;y对于顽固的sed程序员而言);或者 一口气做到了:没有大惊小怪,没有糊涂。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在Perl字符串中无法用L替换0并用H替换1

来自分类Dev

替换,用perl替换字符串

来自分类Dev

PERL; 匹配文件中的字符串;用评论替换

来自分类Dev

用perl替换文件中的字符串

来自分类Dev

用空格替换字符串中的 '\xa0'

来自分类Dev

使用 vue 用渲染表中的字符串替换 1 和 0

来自分类Dev

提取并用bash替换字符串

来自分类Dev

用1替换列中的任何字符串

来自分类Dev

在Perl中查找并替换字符串

来自分类Dev

用{0},{1} ... {n}分割字符串,并替换为空字符串

来自分类Dev

Perl字符串替换

来自分类Dev

Perl字符串替换

来自分类Dev

无法替换PowerShell中的字符串

来自分类Dev

无法替换字符串中的“ $”

来自分类Dev

用替换功能替换xslt 2.0中的字符串

来自分类Dev

用Java中的字符串替换字符串

来自分类Dev

用Excel中的字符串替换字符串

来自分类Dev

用perl中的特定字符替换字符串中的空格

来自分类Dev

无法替换字符串中的子字符串

来自分类Dev

无法用反斜杠字符替换字符串

来自分类Dev

用正则表达式捕获多行字符串并用其替换,每行缩进

来自分类Dev

用替换字符串功能替换字符串

来自分类Dev

使用perl用复杂的密码替换文件中的某些字符串

来自分类Dev

perl:用双引号替换文件中的字符串

来自分类Dev

字符串用1.7E替换0

来自分类Dev

如何用其他字符替换 0 和 1 字符串中的字符

来自分类Dev

无法用SQL查询替换未知长度的字符串?

来自分类Dev

无法用另一个字符串替换字符串中的字符

来自分类Dev

用位置替换字符串中的字符