perl – 有没有办法将子程序的打印输出捕获到变量,所以我可以将它发送到stderr? 或者我可以将输出捕获到变量然后使用警告?我对perl很新.解决方法就在这里.print将其输出发送到“selected”文件句柄,通常是STDOUT.但是Perl提供了select功能供您更改.select函数返回先前选择的文件句柄,因此您可以捕获它并在以后恢复它.
为什么编程Perl使用本地(而不是我的)文件句柄? 当我阅读Perl编程,第2版,第51页,令我困惑的是:我知道,为什么我们不重新开始使用我的?到目前为止,如果我们使用我的(),我看不出有什么会出错.谢谢!
为什么Perl的foreach要求它的变量被声明为我的? 今天,我偶然发现Perl中的某些东西,我没有意识到:它将本地化列表的元素分配给变量.这当然是在Perl文档中记录的–但是我没有记住或读取它.以下脚本演示了我的意思:脚本打印因为$g被“本地化”到foreach循环.据我所知,如果我在foreach循环中添加了$g:实际上,我最终做到这一点,因为我觉得它使得变量在循环中是局部的.我现在的问题是:有没有一个我使用我的功能会发生变化的情况(假设$g已经在
perl-for循环不会修改`my`变量,但是修改`我们的’变量 在Perl5.20中,for循环似乎能够修改模块范围的变量,但不能在父范围内修改一个词法变量(并且不会引入新的范围,如果打印1到10像你所期望的,但以下不:发出以下警告10次:这里发生了什么?我知道Perl子程序不能嵌套,因此它们似乎无法关闭我的变量.看来,在这种情况下,严格模式下的perl应该使用以下消息拒绝第二个程序:即它应该拒绝子例程,因为自由变量没有被声明为任何地方,而for循环因为变量尚未被声明.为什么Perl以这种方式行事?
perl – 如何在lib路径中使用变量? 解决方法首先,你有一个简单的语法错误–你缺少;第一行后.我的变量应该在使用lib中工作正常.但是,由于所有使用指令都在BEGIN块中执行,您的变量将在运行使用时被初始化,因此您需要将初始化设置为BEGIN块.得到:
Perl中的静态局部变量 我正在寻找关于Perl最佳实践的建议.我写了一个复杂的正则表达式的脚本:其中foo是一个经常被调用的函数,$regex在该函数之外不被使用.处理这样的情况最好的办法是什么?我只想把它解释一次,因为它是漫长而复杂的.但是在全局范围内看起来好像有点问题,因为它只在该子系统中使用.有合理的方式来声明它是静态的吗?
如何在反引号内正确使用perl变量名? 我需要在bashshell上执行以下代码:由于width和height是变量,所以我尝试过:但是在编译中,我得到的是全局符号“$widx”在getattach.pl行131.中需要显式包名称的错误,这是因为编译器将$widx视为新的未声明变量,而不是$wid和x.我尝试在反引号内插入双引号,但代码的执行停止,没有任何消息.在shell执行的反引号中插入变量名称的正确方法是什么?他们可以连接吗?解决方法要将变量插入任何内插字符串,只需执行“thisis$foo!”
如何在Perl中打印变量 我在Perl中是非常新的.我有一些代码看起来像这应该连接我的myFile中的每一行,nIds应该是我的行数.我如何打印出我的$ids和$nIds.我只是打印$ids,但Perl抱怨.列表是否正确?解决方法Perl如何投诉?print$id应该可以工作,尽管您可能想要最后一个换行符,或者通过使用say或者-l/$\显式地打印上面的内容.如果你想在一个字符串中插入一个变量,并且在它之后立即有一些变量看起来像变量的一部分,但是不包含变量名称在{}中:
如何为Perl变量设置默认值? 我对Perl完全陌生.我需要使用外部模块HTTP::browserDetect.我正在测试一些代码,并尝试从os_string方法获取操作系统的名称.所以,我简单地初始化了对象并创建了一个变量来存储返回的值.有一些用户代理不是浏览器用户代理,所以它们不会从os_string获取任何值.我收到错误在连接(.)或字符串中使用未初始化的值$os_name当$os_name未初始化时,如何处理这种情况,因