一个小小的要求:我每天都会阅读Stack Overflow的Perl问题,并尽我所能回答/贡献; 今天我需要社区的帮助!
Perl设置:我在Windows上运行Active Perl 5.8.8.安装位于我们部门服务器的本地驱动器上,该驱动器也与网络共享.所有部门用户都通过指向这个网络安装的Perl在自己的PC上运行Perl.这已经工作了多年,并没有引起问题,但它是了解问题所需的一条信息.
有问题的服务器也是我们的"cron"(计划任务)服务器,处理各种自动化任务.上周突然间,Perl脚本(服务器上)的系统调用开始失败(详情如下).起初,我怀疑Perl安装已损坏,但所有客户端PC仍然可以运行相同的Perl脚本而没有任何问题,这让我觉得这是一个服务器问题.我重新启动了服务器两次,问题仍然存在,因此我需要帮助!
以下是系统调用失败的各种方式的一些示例,归结为Perl单行:
% perl -e "system('dir')"
Run Code Online (Sandbox Code Playgroud)
这应该打印一个"目录"列表,但它打开一个子shell.如果我输入"exit",我可以退出子shell,然后我回到原始shell中(通过使用向上箭头键检查shell历史记录来确认).
% perl -e "print `dir`"
Run Code Online (Sandbox Code Playgroud)
这实际上是挂起的.什么都没发生.如果我按Ctrl-C来终止进程,我收到消息"终止信号SIGINT(2)",然后DOS提示返回.但是,DOS提示符中的任何未来命令(甚至只是命中ENTER)都会导致错误"进程尝试写入不存在的管道.".您必须退出DOS提示符,因为它实际上没用.
最后的例子:
% perl -e "system('Z:/Scripts/rebuild.pl')"
Run Code Online (Sandbox Code Playgroud)
'ebuild.pl'未被识别为内部或外部命令,可操作程序或批处理文件.
在这种情况下,Perl将正斜杠(/)切换到DOS/Windows反斜杠(),它已经做了好几年.但是,Perl将"rebuild.pl"文件名开头的"\ r \n"解释为回车符(我认为)并查找剩余的"ebuild.pl".调用其他脚本名称,其字符不能被误解为导致上面的挂起(如果你使用反引号)打开子shell(对于system()调用).
我不只是对此感到困惑 - 我很绝望!我们部门服务器的"cron"作业现在没用,因为我们使用了大量的系统调用.
再说一遍,我不认为这是一个腐败的Perl安装,因为网络用户可以正常运行.那么,可能会导致Perl的系统调用失败的单个机器(不依赖于Perl安装本身)会发生什么?
环境设置,根据要求:
ALLUSERSPROFILE=C:\Documents and Settings\All Users
APPDATA=C:\Documents and Settings\engmodem\Application Data
CDSROOT=Z:\Cadence\SPB_16.5
CDS_CONCEPT_NOSPLASH=TRUE
CDS_LIC_ONLY=1
CDS_SITE=Z:\Cadence\Sites\16.5
CHDL_LIB_INST_DIR=%CDSROOT%
CLIENTNAME=USENTUTTLJL3C
ClusterLog=C:\WINDOWS\Cluster\cluster.log
CommonProgramFiles=C:\Program Files\Common Files
COMPUTERNAME=CORPUSAPP5
ComSpec=C:\WINDOWS\system32\cmd.exe
CONCEPT_INST_DIR=%CDSROOT%
FP_NO_HOST_CHECK=NO
HOMEDRIVE=H:
HOMEPATH=\
HOMESHARE=\\PF1\HOME
ICMHOME=Z:\Software\PTC\INTERC~1
INSTDIR=%CDSROOT%
LOGONSERVER=\\ENGMAHO5
LSF_BINDIR=Z:\Software\LSF\bin
LSF_ENVDIR=\\hwc151\LSF_6.2\etc
MESSAGE=BROADCAST
NUMBER_OF_PROCESSORS=2
OA_PLUGIN_PATH=%CDSROOT%\Share\oaPlugIns
OS=Windows_NT
Path=C:\Program Files\Legato\nsr\bin;Z:\oracle\ora92\bin;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\Program Files\Windows Resource Kits\Tools\;Z:\Software\Perl\5.8.8\bin;C:\Program Files\Oracle\jre\1.3.1\bin;C:\Program Files\Oracle\jre\1.1.8\bin;C:\Program Files\Support Tools\;Z:\Software\LSF\bin;C:\Program Files\PHP\;C:\Program Files\Microsoft SQL Server\90\Tools\binn\;C:\Program …Run Code Online (Sandbox Code Playgroud) 我正在编写一个基于C#.NET 4.5的Windows窗体应用程序.
我知道如何以编程方式修改主窗口的标题,如下所示:
public partial class MyForm: Form
{
public MyForm()
{
InitializeComponent();
if (!PRODUCTION)
{
this.Text += " (test environment)";
}
}
}
Run Code Online (Sandbox Code Playgroud)
但是,到目前为止,我的所有研究都表明,必须在加载/显示表单之前完成.我希望能够在应用程序运行时更改窗口标题,就像Web浏览器更改其窗口标题以包含当前网页的名称一样.
这可能吗?如果是这样,怎么样?
谢谢!
在Chrome中,您可以使用元标签设置标签的颜色
<meta name="theme-color" content="#FFA000">
Run Code Online (Sandbox Code Playgroud)
在我的网站上,我有几个颜色编码的部分.为了让它看起来更好,我想根据当前打开的部分动态更改选项卡的颜色.我试过用jQuery做的:
$("meta[name='theme-color']").attr('content', '#455A64');
Run Code Online (Sandbox Code Playgroud)
但它不起作用.如果有人能告诉我是否/如何在运行时更改此元值,我将非常高兴.
编辑:经过一些检查后,我注意到代码确实更改了元标记内容,但Chrome不会更新标签颜色.
在Visual Basic中连接一个或多个数组(或ArrayLists)的最简单方法是什么?
我正在使用.NET 3.5,如果这很重要的话.
我在我的新Windows 10 PC上安装了ActiveState Perl.我已经在我自己的几台PC上安装了相同版本的Perl,它安装在我公司的其他用户PC上.同样的安装,由我创建.
这是第一次在Windows 10上尝试此操作.在资源管理器中双击Perl脚本(*.pl)的基本操作会导致打开控制台窗口并运行Perl来运行脚本.
此外,在Windows命令提示符中,我可以键入perl.exe script.pl,脚本运行正常.但是,当我输入时script.pl,没有任何反应.没有输出,没有错误,任务管理器中没有可见的perl.exe进程.
我第一次运行Perl脚本(从Windows命令提示符,我相信,只使用script.pl语法),Windows弹出一个窗口,询问我想用什么程序来打开这个文件.Perl是默认值,我单击OK.
我从来没有在Windows 7或8中看过那个窗口,所以我认为它是Windows 10特有的东西,并且这是某种方式阻止我只是打字script.pl.因为,在启动时script.pl,我需要文件关联来选择正确的程序,但是当我输入时perl.exe script.pl,perl.exe正在直接启动.但是,Windows 10"选择你的默认程序"的事情在通过弄乱文件关联从命令提示符运行时会受到阻碍.
但是,不是100%确定为什么它可以从资源管理器中运行,但我很确定我需要清除该默认程序.我删除了.pl文件的注册表项HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts,但没有帮助.
这似乎是Windows 10的一个更普遍的问题,或者可能只是我的安装,或者我不知道的组策略.
以下命令(在管理员命令提示符下运行)在Windows 8.1中正常工作,但在Windows 10中不正常:
assoc .foo=Foobar
ftype Foobar=C:\WINDOWS\system32\foo.bat %1
echo @echo off > foo.bat
echo echo The filename is %1 >> foo.bat
echo hi > foo.foo
foo.foo
Run Code Online (Sandbox Code Playgroud)
结果应该是输出:
The filename is C:\WINDOWS\system32\foo.foo
Run Code Online (Sandbox Code Playgroud)
但Windows 10什么都不做.它似乎只允许内置应用程序以这种方式关联,而不是下载/安装的EXE的BAT脚本.
我的基于 M1 的新 Mac 具有 Apple 的内置 Perl 版本 v5.28.2。我使用自制软件安装了最新的 perl 5.32.0,并配置了 local::lib 选项,以便 cpan 模块安装在 ~/perl5 中。所有这些在大多数情况下都有效。
但是...我无法在这个 homebrew/local-lib 配置中安装 XML:Parser。我认为 XML::Parser 安装在 Apple 的基本配置中,但我真的希望能够更新 Perl 并安装模块,所以我认为这个配置是正确的方法。但是很多东西都需要 XML::Parser。
这是我的环境变量、PATH 等:
PERL5LIB=/Users/jim/perl5/lib/perl5
PERL_LOCAL_LIB_ROOT=/Users/jim/perl5
PERL_MB_OPT=--install_base "/Users/jim/perl5"
PERL_MM_OPT=INSTALL_BASE=/Users/jim/perl5
PATH=/Users/jim/perl5/bin:.:/Users/jim/Documents/scripts:/opt/homebrew/bin:/Developer/usr/bin:/System/Library/Frameworks/Python.framework/Versions/Current/bin:/Users/jim/Library/Python/2.7/bin:/Users/jim/perl5/bin:/Users/jim/go/bin:/Users/jim/.cargo/bin:/usr/local/bin:/bin:/usr/bin:/usr/sbin:/sbin:/usr/X11/bin
% /usr/bin/which -a perl
/opt/homebrew/bin/perl
/usr/bin/perl
% /usr/bin/which -a cpan
/Users/jim/perl5/bin/cpan
/opt/homebrew/bin/cpan
/Users/jim/perl5/bin/cpan
/usr/bin/cpan
Run Code Online (Sandbox Code Playgroud)
跑步cpan install XML::Parser给出:
Running make test for TODDR/XML-Parser-2.46.tar.gz
"/opt/homebrew/Cellar/perl/5.32.0/bin/perl" -MExtUtils::Command::MM -e 'cp_nonempty' -- Expat.bs ../blib/arch/auto/XML/Parser/Expat/Expat.bs 644
Manifying 1 pod document
PERL_DL_NONLAZY=1 "/opt/homebrew/Cellar/perl/5.32.0/bin/perl" "-MExtUtils::Command::MM" "-MTest::Harness" "-e" "undef *Test::Harness::Switches; …Run Code Online (Sandbox Code Playgroud)