热门标签 | 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");
}
}

}



推荐阅读
  • 基于KVM的SRIOV直通配置及性能测试
    SRIOV介绍、VF直通配置,以及包转发率性能测试小慢哥的原创文章,欢迎转载目录?1.SRIOV介绍?2.环境说明?3.开启SRIOV?4.生成VF?5.VF ... [详细]
  • 本文深入探讨了 Java 中的 Serializable 接口,解释了其实现机制、用途及注意事项,帮助开发者更好地理解和使用序列化功能。 ... [详细]
  • 本文详细介绍了Java中org.neo4j.helpers.collection.Iterators.single()方法的功能、使用场景及代码示例,帮助开发者更好地理解和应用该方法。 ... [详细]
  • 本文将介绍如何编写一些有趣的VBScript脚本,这些脚本可以在朋友之间进行无害的恶作剧。通过简单的代码示例,帮助您了解VBScript的基本语法和功能。 ... [详细]
  • Explore how Matterverse is redefining the metaverse experience, creating immersive and meaningful virtual environments that foster genuine connections and economic opportunities. ... [详细]
  • 扫描线三巨头 hdu1928hdu 1255  hdu 1542 [POJ 1151]
    学习链接:http:blog.csdn.netlwt36articledetails48908031学习扫描线主要学习的是一种扫描的思想,后期可以求解很 ... [详细]
  • 本文探讨了如何在给定整数N的情况下,找到两个不同的整数a和b,使得它们的和最大,并且满足特定的数学条件。 ... [详细]
  • 本文详细介绍了Java中org.w3c.dom.Text类的splitText()方法,通过多个代码示例展示了其实际应用。该方法用于将文本节点在指定位置拆分为两个节点,并保持在文档树中。 ... [详细]
  • 本文介绍如何通过创建替代插入触发器,使对视图的插入操作能够正确更新相关的基本表。涉及的表包括:飞机(Aircraft)、员工(Employee)和认证(Certification)。 ... [详细]
  • 尽管使用TensorFlow和PyTorch等成熟框架可以显著降低实现递归神经网络(RNN)的门槛,但对于初学者来说,理解其底层原理至关重要。本文将引导您使用NumPy从头构建一个用于自然语言处理(NLP)的RNN模型。 ... [详细]
  • 基因组浏览器中的Wig格式解析
    本文详细介绍了Wiggle(Wig)格式及其在基因组浏览器中的应用,涵盖variableStep和fixedStep两种主要格式的特点、适用场景及具体使用方法。同时,还提供了关于数据值和自定义参数的补充信息。 ... [详细]
  • 深入理解Redis的数据结构与对象系统
    本文详细探讨了Redis中的数据结构和对象系统的实现,包括字符串、列表、集合、哈希表和有序集合等五种核心对象类型,以及它们所使用的底层数据结构。通过分析源码和相关文献,帮助读者更好地理解Redis的设计原理。 ... [详细]
  • #点球小游戏fromrandomimportchoiceimporttimescore[0,0]direction[left,center,right]defkick() ... [详细]
  • PHP 过滤器详解
    本文深入探讨了 PHP 中的过滤器机制,包括常见的 $_SERVER 变量、filter_has_var() 函数、filter_id() 函数、filter_input() 函数及其数组形式、filter_list() 函数以及 filter_var() 和其数组形式。同时,详细介绍了各种过滤器的用途和用法。 ... [详细]
  • 反向投影技术主要用于在大型输入图像中定位特定的小型模板图像。通过直方图对比,它能够识别出最匹配的区域或点,从而确定模板图像在输入图像中的位置。 ... [详细]
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社区 版权所有