perl study note-2

本文详细介绍了Perl语言中条件判断与循环控制的基本用法,包括if/elsif/else语句、unless语句、while循环、until循环及for循环等,并通过实例展示了如何使用这些结构进行数组操作和简单的数学计算。
#!/usr/bin/perl -w

use strict;

=head1
1 condition:
  
false when value is 0/null string/string with "0" value/undef;
2 block:
  
{}; vars only take effect in the block they are defined;

3 compare operators:
  
<>==!=... used for numeric compare;
  eq, lt, gt, le, ge, ne used 
for string compare;

4 condition state:
  
if true {} elsif {} else {};
  statement 
if true; simple!
  unless 
false {};

5 loop state:
  
while true {};
  untile 
false {};
  
for (init; condition; operation) {};
  
"statement of $_" for [@array] | (0...10)
  
for (1...10"statement of $_" };
  print 
for ();
  print 
foreach (@array);
  
for my $var (1...10{};
  
for === foreach
=cut
print 
"part1 condition/loop................................................. ";
my @array 
= qw/-1 0 1 2 3 -2 -3/;
my @positive 
= ();
foreach (@array) {
    push @positive, ($_
**2if ($_ > 0);
}

print 
foreach (@positive);print " ";
@positive 
= ();
@positive 
= map { $_**2 } grep {$_ > 0} (@array);
print 
for (@positive); print " ";

my $test 
= 0;
print 
"test=0 " if ($test == 0);
print 
"test=0 " unless ($test != 0);

print 
"4 false conditions: 0/null string/string 0/undef ";
my $cond 
= 0;
print 
"cond=0: false " if (! $cond);
$cond 
= "";
print 
"cond="": false " if (! $cond);
$cond 
= "0";
print 
"cond="0": false " if (! $cond);
$cond 
= undef;
print 
"cond=undef: false " if (! $cond);

=head2
part2: exercise
1. caculate 1+3+5+...+99;
2. the max value of n when (1+2+..+n)<=100;
3. caculate the factorial of x, inputted by user, x<50 or alarm when x>50;
=cut
print 
"part2 exercise................................................. ";
my $res 
= 0;
for (my $i=1; $i<100; $res+=$i, $i+=2{;}
print 
"1+3+5+...+99 = $res ";
$res 
= 0;
my $n 
= 0;
foreach (1...100){
    $n 
= $_-1;
    last 
if (($res+=$_) > 100);
}

print "res=$res, when n=$n ";

[root@china1 code]# .
/perlnote3.pl 
part1 condition
/loop.................................................
149
149
test
=0
test
=0
4 false conditions: 0/null string/string 0/undef
cond
=0false
cond
=""false
cond
="0"false
cond
=undef: false
part2 exercise.................................................
1+3+5+...+99 = 2500
res
=91, when n=13
<think>我们注意到用户之前执行yum命令时出现了多个包找不到的错误,包括perl-Config-Tiny, perl-Log-Dispatch, perl-Parallel等。同时,用户还尝试安装其他一些包,但命令中出现了未找到命令的错误(如ForkManager,Mock-LWP.noarch等),这是因为用户将多个命令写在一行,而yum找不到的包导致后续命令被当作独立命令执行。 根据引用[1]中的正确包名,以及我们之前对问题的分析,我们需要修正包名并启用EPEL仓库。 步骤: 1. 启用EPEL仓库(如果尚未启用)。 2. 使用正确的包名重新安装。 修正后的包名(与引用[1]一致): - `perl-Parallel-ForkManager` 应改为 `perl-ParallelForkManager`(去掉中间的连字符) - `perl-Test-Mock-LWP` 应改为 `perl-TestMock-LWP`(去掉中间的连字符) - 去掉`.noarch`后缀(因为yum安装时不需要指定架构,会自动选择) 因此,正确的安装命令应该是: ```bash yum -y install perl-DBD-MySQL perl-Config-Tiny perl-Log-Dispatch perl-ParallelForkManager perl-Config-IniFiles ncftp perl-Params-Validate perl-CPAN perl-TestMock-LWP perl-LWP-Authen-Negotiate perl-devel perl-ExtUtils-CBuilder perl-ExtUtils-MakeMaker ``` 但是,如果系统仍然提示某些包找不到,可能是由于EPEL仓库没有启用。因此,我们先确保EPEL仓库已安装并启用。 具体步骤: ### 1. 安装EPEL仓库 ```bash # 对于RHEL/CentOS 7 yum install -y epel-release # 对于RHEL/CentOS 8 dnf install -y epel-release ``` ### 2. 更新yum缓存 ```bash yum clean all yum makecache ``` ### 3. 使用修正后的包名安装 ```bash yum -y install perl-DBD-MySQL perl-Config-Tiny perl-Log-Dispatch perl-ParallelForkManager perl-Config-IniFiles ncftp perl-Params-Validate perl-CPAN perl-TestMock-LWP perl-LWP-Authen-Negotiate perl-devel perl-ExtUtils-CBuilder perl-ExtUtils-MakeMaker ``` ### 4. 如果仍然有包找不到,考虑使用CPAN安装 对于无法通过yum安装的Perl模块,可以使用CPAN(Perl综合归档网络)来安装。首先确保已经安装了`perl-CPAN`,然后使用CPAN命令安装缺失的模块。 例如,安装`Config::Tiny`模块: ```bash cpan Config::Tiny ``` 注意:使用CPAN安装可能需要编译环境,所以确保已经安装了`gcc`等开发工具。 ### 5. 安装开发工具(可选,如果编译需要) ```bash yum groupinstall -y "Development Tools" ``` ### 6. 验证安装 安装完成后,可以通过以下命令验证部分模块是否安装成功: ```bash perl -e 'use DBD::mysql;' perl -e 'use Config::Tiny;' perl -e 'use Log::Dispatch;' perl -e 'use Parallel::ForkManager;' ``` 如果没有报错,说明安装成功。 ### 相关问题 1. 如何检查Perl模块是否已经安装? 2. 如何通过CPAN安装Perl模块? 3. EPEL仓库是什么?它包含哪些软件包? 4. 在安装Perl模块时遇到编译错误怎么办? 5. 如何配置yum仓库以获取更多的Perl模块? ### 注意 在用户的问题中,他可能是在安装MHA(MySQL高可用)的依赖包。因此,确保这些包正确安装后,可以继续按照引用[2]中的步骤安装MHA节点和Manager。 如果用户是在MHA的manager节点上操作,还需要安装manager包(mha4mysql-manager),而其他节点只需安装node包(mha4mysql-node)。 引用: [^1]: 正确的包名列表参考。 [^2]: MHA安装步骤。</think>根据您提供的错误信息和引用内容,您在安装Perl依赖包时遇到"未找到匹配"错误。这主要是由于包名不匹配和仓库配置问题导致的。以下是完整的解决方案: ### 问题原因分析 1. **包名错误**: - `perl-Config-Tiny` → 正确应为 `perl-Config-Tiny` - `perl-Parallel-ForkManager` → 正确应为 `perl-ParallelForkManager`(去掉连字符)[^1] - `perl-Test-Mock-LWP.noarch` → 正确应为 `perl-TestMock-LWP`(去掉后缀)[^1] 2. **仓库缺失**: - EPEL仓库未启用(包含特殊Perl包) - 系统未更新软件包缓存 3. **命令格式错误**: - 不应使用`.noarch`后缀 - 多个包应放在同一行安装 ### 完整解决方案 #### 步骤1:启用EPEL仓库 ```bash # CentOS/RHEL 7 sudo yum install -y epel-release # CentOS/RHEL 8 sudo dnf install -y epel-release ``` #### 步骤2:更新软件包缓存 ```bash sudo yum clean all sudo yum makecache ``` #### 步骤3:使用修正包名安装 ```bash sudo yum install -y \ perl-DBD-MySQL \ perl-Config-Tiny \ perl-Log-Dispatch \ perl-ParallelForkManager \ # 修正:去掉连字符[^1] perl-Config-IniFiles \ ncftp \ perl-Params-Validate \ perl-CPAN \ perl-TestMock-LWP \ # 修正:去掉后缀[^1] perl-LWP-Authen-Negotiate \ perl-devel \ perl-ExtUtils-CBuilder \ perl-ExtUtils-MakeMaker ``` #### 步骤4:验证安装 ```bash # 检查关键模块 perl -e 'use DBD::mysql; print "DBD-mysql installed\n"' perl -e 'use Parallel::ForkManager; print "ForkManager installed\n"' # 检查所有安装包 rpm -qa | grep -E 'perl|ncftp' ``` ### 备选方案:CPAN安装 如果仍有缺失模块,使用Perl的CPAN工具安装: ```bash sudo yum install -y perl-CPAN sudo cpan -i Config::Tiny Log::Dispatch Parallel::ForkManager Test::Mock::LWP ``` ### MHA安装补充说明 根据引用[2],安装MySQL高可用(MHA)时需注意: 1. **所有节点**都需要安装基础依赖: ```bash tar zxf mha4mysql-node-0.58.tar.gz cd mha4mysql-node-0.58/ perl Makefile.PL make && sudo make install ``` 2. **Manager节点**额外安装manager包: ```bash tar zxf mha4mysql-manager-0.58.tar.gz cd mha4mysql-manager-0.58/ perl Makefile.PL make && sudo make install ``` 3. **配置文件**`/etc/masterha/app1.cnf`需包含正确认证信息: ```ini [server default] user=mha_user password=your_secure_password ``` ### 相关问题 1. 如何解决`perl Makefile.PL`出现的"Can't locate XXX.pm"错误? 2. EPEL仓库包含哪些特殊Perl模块? 3. 如何在离线环境中安装Perl依赖? 4. MHA配置文件中`candidate_master`和`no_master`参数的作用? 5. 如何验证MHA故障切换功能是否正常? 6. 使用CPAN安装时如何解决编译依赖问题? 通过上述步骤,您应该能成功解决Perl依赖包安装问题。如仍有报错,请提供完整的错误输出以便进一步诊断[^1][^2]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值