热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

[OReilly_Learning_Perl_5th_Edition]_Chap06_Exercises

3.[15]Writeaprogramtolistallofthekeysandvaluesin%ENV.PrinttheresultsintwocolumnsinASCIIbet





3. [15] Write a program to list all of the keys and values in %ENV. Print the results in two columns in ASCIIbetical order. For extra credit, arrange the output to vertically align both columns. The length function can help you figure out how wide to make the first column. Once you get the program running, try setting some new environment variables and ensuring that they show up in your output.


#!perl
use warnings;
use strict;
use 5.010;
use POSIX;


#while ((my $key, my $value) = each %ENV)
#{
# print "$key => $value";
#}

#环境变量名数组
my @envNames = keys %ENV;
#最长的环境变量名的长度
my $maxEnvNameLen = length $envNames[0];
shift @envNames;
#环境变量名
my $envName = undef;
foreach $envName (@envNames)
{
if (length $envName > $maxEnvNameLen)
{
$maxEnvNameLen = length $envName;
}
}

#命令行宽度
my $cmdLineWidth = 80;
#"NAME"标题
my $envNameTitle = "NAME";
my $envNameTitleFormated =
(" " x
(POSIX::floor($maxEnvNameLen / 2) - POSIX::floor(length($envNameTitle) / 2))).
$envNameTitle;
#关联符号,如NAME => VALUE
my $associatiOnSymbol= " => ";
#"VALUE"标题
my $envValueTitle = "VALUE";
my $envValueTitleFormated =
(" " x ($maxEnvNameLen + length($associationSymbol) -
(POSIX::floor($maxEnvNameLen / 2) -
POSIX::floor(length($envNameTitle) / 2) + length($envNameTitle)) +
POSIX::floor(($cmdLineWidth - $maxEnvNameLen - length($associationSymbol)) / 2) -
POSIX::floor(length($envValueTitle)/2))).$envValueTitle;
#输出标尺
say "1234567890" x (POSIX::ceil($cmdLineWidth / 10));
#输出标题
say $envNameTitleFormated.$envValueTitleFormated;

#环境变量值最大允许宽度
my $envValueWidth = $cmdLineWidth - $maxEnvNameLen - length($associationSymbol);

for $envName (sort keys %ENV)
{
printf "%".$maxEnvNameLen."s".$associationSymbol, $envName;
#环境变量值
my $envValue = $ENV{$envName};
#环境变量值长度
my $envValueLen = length $envValue;
#环境变量值占用的行数
my $envValueLines = POSIX::ceil($envValueLen / $envValueWidth);

for (my $i = 0; $i <$envValueLines; ++$i)
{
chomp(my $tmp = substr($envValue, $i * $envValueWidth, $envValueWidth));
if ($i == 0)
{
print $tmp."\n";
}
else
{
print((" " x ($maxEnvNameLen + 4)).$tmp."\n");
}
}

}



推荐阅读
  • 本文详细介绍了Akka中的BackoffSupervisor机制,探讨其在处理持久化失败和Actor重启时的应用。通过具体示例,展示了如何配置和使用BackoffSupervisor以实现更细粒度的异常处理。 ... [详细]
  • 尽管使用TensorFlow和PyTorch等成熟框架可以显著降低实现递归神经网络(RNN)的门槛,但对于初学者来说,理解其底层原理至关重要。本文将引导您使用NumPy从头构建一个用于自然语言处理(NLP)的RNN模型。 ... [详细]
  • 获取计算机硬盘序列号的方法与实现
    本文介绍了如何通过编程方法获取计算机硬盘的唯一标识符(序列号),并提供了详细的代码示例和解释。此外,还涵盖了如何使用这些信息进行身份验证或注册保护。 ... [详细]
  • 本文详细介绍了Java中org.neo4j.helpers.collection.Iterators.single()方法的功能、使用场景及代码示例,帮助开发者更好地理解和应用该方法。 ... [详细]
  • 本文将介绍如何编写一些有趣的VBScript脚本,这些脚本可以在朋友之间进行无害的恶作剧。通过简单的代码示例,帮助您了解VBScript的基本语法和功能。 ... [详细]
  • 本文介绍如何使用Objective-C结合dispatch库进行并发编程,以提高素数计数任务的效率。通过对比纯C代码与引入并发机制后的代码,展示dispatch库的强大功能。 ... [详细]
  • 本章将深入探讨移动 UI 设计的核心原则,帮助开发者构建简洁、高效且用户友好的界面。通过学习设计规则和用户体验优化技巧,您将能够创建出既美观又实用的移动应用。 ... [详细]
  • 本文探讨了如何在给定整数N的情况下,找到两个不同的整数a和b,使得它们的和最大,并且满足特定的数学条件。 ... [详细]
  • 本文介绍如何使用 NSTimer 实现倒计时功能,详细讲解了初始化方法、参数配置以及具体实现步骤。通过示例代码展示如何创建和管理定时器,确保在指定时间间隔内执行特定任务。 ... [详细]
  • 基因组浏览器中的Wig格式解析
    本文详细介绍了Wiggle(Wig)格式及其在基因组浏览器中的应用,涵盖variableStep和fixedStep两种主要格式的特点、适用场景及具体使用方法。同时,还提供了关于数据值和自定义参数的补充信息。 ... [详细]
  • PHP 编程疑难解析与知识点汇总
    本文详细解答了 PHP 编程中的常见问题,并提供了丰富的代码示例和解决方案,帮助开发者更好地理解和应用 PHP 知识。 ... [详细]
  • 本文详细记录了在基于Debian的Deepin 20操作系统上安装MySQL 5.7的具体步骤,包括软件包的选择、依赖项的处理及远程访问权限的配置。 ... [详细]
  • 本文详细介绍如何使用arm-eabi-gdb调试Android平台上的C/C++程序。通过具体步骤和实用技巧,帮助开发者更高效地进行调试工作。 ... [详细]
  • 本文详细介绍了Java中org.w3c.dom.Text类的splitText()方法,通过多个代码示例展示了其实际应用。该方法用于将文本节点在指定位置拆分为两个节点,并保持在文档树中。 ... [详细]
  • 基于KVM的SRIOV直通配置及性能测试
    SRIOV介绍、VF直通配置,以及包转发率性能测试小慢哥的原创文章,欢迎转载目录?1.SRIOV介绍?2.环境说明?3.开启SRIOV?4.生成VF?5.VF ... [详细]
author-avatar
qzq9037091
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有