如何检查Perl模块是否是核心的一部分 - 即它是标准安装的一部分?
我在找:
也许问题应该是:如何判断最初在机器上安装特定 Perl的模块?(实际上,它现在被问到如何判断最初在机器上安装特定Perl的模块?)
鉴于现在似乎不是一个整体的Perl标准安装,至少这个新问题的答案将告诉我最初在安装时的安装.
有了这些知识,如果我保留原始的安装程序映像/包或者知道如何在线再次获取确切的东西,那么我可以为多台机器安装可重复的Perl,了解将出现哪些模块以及哪些模块不会出现.
为了进一步澄清:我在看什么就用原来的安装,提供了作为安装的一部分什么模块,什么是内置.不是从那以后安装的.
我希望能够在安装的机器上执行此操作.因此,我将依靠安装以某种形式记录它最初的内容.
我问分拆问题: 如何判断最初在机器上安装特定Perl的模块?(如何判断最初在计算机上安装特定Perl的模块?)
在Perl中,如何使用一个正则表达式分组来捕获多个匹配它的事件到多个数组元素?
例如,对于字符串:
var1=100 var2=90 var5=hello var3="a, b, c" var7=test var3=hello
Run Code Online (Sandbox Code Playgroud)
用代码处理这个:
$string = "var1=100 var2=90 var5=hello var3=\"a, b, c\" var7=test var3=hello";
my @array = $string =~ <regular expression here>
for ( my $i = 0; $i < scalar( @array ); $i++ )
{
print $i.": ".$array[$i]."\n";
}
Run Code Online (Sandbox Code Playgroud)
我想看看输出:
0: var1=100
1: var2=90
2: var5=hello
3: var3="a, b, c"
4: var7=test
5: var3=hello
Run Code Online (Sandbox Code Playgroud)
我会用什么作为正则表达式?
我想在这里匹配的东西之间的共性是一个赋值字符串模式,所以类似于:
my @array = $string =~ m/(\w+=[\w\"\,\s]+)*/;
Run Code Online (Sandbox Code Playgroud)
其中*表示与该组匹配的一个或多个事件.
(我使用split()打折,因为有些匹配本身包含空格(即var3 ...),因此不会产生预期的结果.)
有了上面的正则表达式,我只得到:
0: var1=100 var2
Run Code Online (Sandbox Code Playgroud)
正则表达式是否可能?还是需要添加代码?
在查找"perl regex …
我正在寻找一个免费的开源工具集,它将编译各种"经典"脚本语言,例如Korn Shell,ksh,csh,bash等作为可执行文件 - 如果脚本调用其他程序或可执行文件,对于它们包含在单个可执行文件中.
原因:
混淆代码交付给客户,以便不泄露我们的知识产权 - 交付到客户自己的机器/系统上,我无法控制我可以设置的访问权限,因此程序文件必须是二进制的通过在文本编辑器或hexdump
查看器中查看,无法轻易看到工作.
为客户制作单个,简单部署的程序,而不需要/或少量任何外部依赖项.
我更喜欢简单的东西而不需要包管理器,因为:
我不能依靠客户的知识来执行(联合国)包装说明和
我不能依赖管理其机器的策略来安装软件包(实际上是来自第三方).
最简单的首选方法是能够将正常运行的单个可执行文件编译为正确的机器代码,而不会产生任何依赖性.
我有一个Vagrant VM标准问题lucid32.box正在运行.在此设置LAMP的完整说明是什么?
我看过刀(厨师的一部分)并试图:
vagrant@lucid32:~$ knife cookbook site install apache2
Run Code Online (Sandbox Code Playgroud)
但得到了
WARNING: No knife configuration file found
Run Code Online (Sandbox Code Playgroud)
如何设置刀具配置文件以及我应该在其中包含哪些内容?
我一直在网上搜索很多答案,但是部分解决方案不能解释他们的起点/先决条件.
更新
我的目标是自己回答这个问题,因为其他人似乎并不想这样做.这是我目前的理解 - 我的目标是稍后用红色解决我的未知/问题.
邮箱将发件人名称显示为"Apache",因为我自动发送的邮件是从Perl CGI程序发送的.如何将其更改为其他内容?
嗨,伙计们,你们可以告诉我为什么我不能删除任何盒子.
$ vagrant box list
base (virtualbox)
lucid32 (virtualbox)
$ vagrant box remove lucid32 http://files.vagrantup.com/lucid32.box
Box 'lucid32' could not be found.
$ vagrant box remove base http://files.vagrantup.com/lucid32.box
Box 'base' could not be found.
$
Run Code Online (Sandbox Code Playgroud)
初始设置是这样的:
vagrant box add lucid32 http://files.vagrantup.com/lucid32.box
vagrant box add base http://files.vagrantup.com/lucid32.box
Run Code Online (Sandbox Code Playgroud)
更新
在我原来的问题中,我写了以下内容:文档似乎非常基本,不包括故障排除.我看着这里:......等我说错了,确实如此.SO用户@ cmur2回答指出我的错误并且接受了(见下面的回答).他们提供了我在这里没有的那双新鲜的眼睛.谢谢他们.这个问题是微不足道的,但我仍然认为值得保留以防万一其他人拥有与我相同的块.
在MacOS 10.7.5上运行此版本,Vagrant版本1.1.5(最新版本来自http://downloads.vagrantup.com/)
删除的原因是我想重新开始,我添加了太多的盒子.我应该能够删除我认为的所有盒子.
是否可以从原始ISO自动创建用于OS安装的Vagrant .box文件?
对我而言,这是Vagrant提供的虚拟机上操作系统安装和配置的端到端自动化方面的重大差距.
当然,VagrantBox.es提供了许多基本的.box操作系统安装文件供使用.但有些来自第三方供应商,而不是来自最初的OS分销商.例如Arch Linux:Arch Linux 64(2012-07-02)http://vagrant.pouss.in/archlinux_2012-07-02.box
不想对第三方供应商的努力持否定态度,但有些组织可能想要原始操作系统提供商的原始安装映像(例如,对于上面的Arch示例,这将是:https://www.archlinux.org/下载/).想要原始安装映像的原因是安全性(因为无法验证第三方映像是否存在安全威胁和恶意软件)并将映像作为原始供应商的预期而不需要额外的东西.另一个原因是直接利用原始供应商提供的新版本,而不必等待第三方将其作为Vagrant发布.
有从.ISO图像创建.box文件的指南:
但这些都是手动步骤 - 这违背了Vagrant自动化和一致性背后的哲学.特别是如果许多人想要实现能够使用原始目标的最终目标 - 这将最终在每个人的部分重复努力.
因此,我将从一个明确的答案中看到这里,该答案描述了如何制作通用自动化脚本以将.ISO OS安装映像转换为Vagrant框.
我需要在没有连接到互联网的联网机器上安装基于Perl的软件.因此,我想下载Perl模块的特定版本和/或最新版本,我还想知道这些模块是否需要安装过程.
背景:
出于安全原因,机器未连接到互联网,也认为不必要.
我将下载的模块放在我称之为"安装服务器"的机器上,它包含我的基于Perl的软件,并且还包含Perl模块的本地副本.
我打电话给我想安装基于Perl的软件的机器,"目标机器",也没有连接到互联网.可以有几台目标机器,每台机器都可以运行我想要安装的软件.我登录目标计算机并运行安装脚本,该脚本将通过本地网络连接到安装机器,以获取基于Perl的软件和相关的Perl模块并安装它们.
所以我需要知道:
作为安装模块的一部分,我宁愿不要做make install等任何事情.我希望模块可以根据需要进行预编译或准备,以便安装它们尽可能简单.我想避免其他依赖项,如make及其配置,并且必须解析其输出以检查它是否成功.
请通过询问上述具体问题来帮助我,因为我无法改变未连接到互联网的"安装机器"和"目标机器"的概念 - 我必须提供在此安排下工作的解决方案.
我想关闭在Windows机器上的应用程序中运行的VBScript对服务器进行URL调用时使用的缓存.我用什么函数/方法/对象来做这个?
当第一次进行调用时,我的基于Linux的Apache服务器从正在运行的CGI Perl脚本返回响应.但是,后续运行的脚本似乎使用了与第一次相同的响应,因此数据正在某处缓存.我的服务器日志确认在以后的那些时间内没有调用服务器,仅在第一次.
这就是我在做的事情.我在商业应用程序中使用以下代码(不想提及此应用程序,可能与我的问题无关):
With CreateObject("MSXML2.XMLHTTP")
.open "GET", "http://myserver/cgi-bin/nsr/nsr.cgi?aparam=1", False
.send
nsrresponse =.responseText
End With
Run Code Online (Sandbox Code Playgroud)
在上面的对象上是否有一个函数/方法来关闭缓存,或者我应该在创建URL之前调用一个方法/函数来关闭响应对象的缓存?
我在这里寻找解决方案:http://msdn.microsoft.com/en-us/library/ms535874(VS.85).aspx - 不是很有帮助.在这里:http://www.w3.org/TR/XMLHttpRequest/ - 非常不友好,难以阅读.
我也试图强制不使用http标头设置和html文件头元数据缓存:
服务器端Perl CGI脚本的片段,它将响应返回给调用客户端,将expiry设置为0.
print $httpGetCGIRequest->header(
-type => 'text/html',
-expires => '+0s',
);
Run Code Online (Sandbox Code Playgroud)
响应中的Http头设置发送回客户端:
<html><head><meta http-equiv="CACHE-CONTROL" content="NO-CACHE"></head>
<body>
response message generated from server
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
上面的http标头和html文档头设置都没有用,因此我的问题.
是否可以在一台机器上运行多个Perl安装(在"容器"中)?
原因是我有不同的基于Perl的服务器端Web应用程序,并希望独立安排更新.
例如,bugzilla升级在我看来非常具有侵略性,下载所有方式或模块更新也很冗长(从而增加了在升级仍然是部分的时候依赖于那些模块的其他应用程序上出现不可预测行为的可能性) .
我认为应该可以在一台服务器上运行多个独立的服务器端CGI Perl应用程序,我宁愿不被告知将它们分成不同的机器 - 我认为这很浪费,而且我还没有那个资源.
perl ×4
vagrant ×3
install ×2
module ×2
automation ×1
binary ×1
caching ×1
compilation ×1
download ×1
email ×1
executable ×1
grouping ×1
knife ×1
lamp ×1
linux ×1
local ×1
mail-sender ×1
match ×1
obfuscation ×1
regex ×1
response ×1
scripting ×1
vbscript ×1
windows-7 ×1