我希望我的Perl脚本的行为与任何其他可执行文件(*.exe文件)一样.
myscript.pl
我希望它执行而不是在文本编辑器中打开.myscript.pl
而不是perl myscript.pl
.myscript
而不是myscript.pl
.program | myscript
而不是program | perl myscript.pl
.您必须在Windows上进行许多更改才能使所有这些工作正常进行.用户通常偶然发现的东西,不工作,一次一个; 让他们感到困惑,他们是否犯了错误,Perl中存在错误,Windows中存在错误,或者他们想要的行为是不可能的.这个问题旨在提供一个单一的参考点,使一切工作在前面; 理想情况下,在这些问题发生之前.
相关问题:
让我们说我们有以下数组:
my @arr=('Jan','Feb','Mar','Apr');
my @arr2=@arr[0..2];
Run Code Online (Sandbox Code Playgroud)
如果我们有如下所示的数组引用,我们怎么能做同样的事情:
my $arr_ref=['Jan','Feb','Mar','Apr'];
my $arr_ref2; # How can we do something similar to @arr[0..2]; using $arr_ref ?
Run Code Online (Sandbox Code Playgroud) 编写模块的最佳框架是什么 - ExtUtils :: MakeMaker(h2xs)或Module :: Build?
在java中,可以使用哪个正则表达式来替换它们,例如:
之前:aaabbb之后:ab
之前:14442345之后:142345
谢谢!
我试图使用constant
pragma 在Perl中定义常量:
use constant {
FOO => "bar",
BAR => "foo"
};
Run Code Online (Sandbox Code Playgroud)
我遇到了一些麻烦,并希望有一种标准的处理方式.
首先...
我正在为Subversion定义一个钩子脚本.为了简单起见,我希望有一个文件,我正在使用的类(包)与我的实际脚本在同一个文件中.
这个包中的大部分都会包含常量:
print "This is my program";
package MyClass;
use constant {
FOO => "bar"
};
sub new { ... }
Run Code Online (Sandbox Code Playgroud)
我希望我的常规FOO
可以访问我的主程序.我想这样做而不必将其称为MyClass::FOO
.通常,当包是一个单独的文件时,我可以在我的主程序中执行此操作:
use MyClass qw(FOO);
Run Code Online (Sandbox Code Playgroud)
但是,由于我的课程和程序是单个文件,我不能这样做.对于我的主程序来说,能够访问我班级中定义的常量的最佳方法是什么?
第二个问题......
我想使用常量值作为哈希键:
$myHash{FOO} = "bar";
Run Code Online (Sandbox Code Playgroud)
问题是%myHash
将文字字符串FOO
作为键而不是常量的值.当我做这样的事情时,这会导致问题:
if (defined $myHash{FOO}) {
print "Key " . FOO . " does exist!\n";
}
Run Code Online (Sandbox Code Playgroud)
我可以强制上下文:
if (defined $myHash{"" . FOO . ""}) {
Run Code Online (Sandbox Code Playgroud)
我可以添加括号: …
我遇到了一种情况,我无法以直观的方式禁止警告,因为perl正在调用内置函数.例如
use strict;
use warnings;
{
no warnings 'substr'; # no effect
foo(substr('123', 4, 6)); # out of range but shouldn't emit a warning
}
sub foo {
my $s = shift; # warning reported here
# do something
}
Run Code Online (Sandbox Code Playgroud)
运行此代码会导致
substr outside of string at c:\temp\foo.pl line 10.
Run Code Online (Sandbox Code Playgroud)
为了禁止警告,我必须移动no warnings 'substr'
内部功能.
sub foo {
no warnings 'substr'; # works here, but there's no call to substr
my $s = shift; # no warnings here
# do something …
Run Code Online (Sandbox Code Playgroud) 分支的颠覆概念似乎侧重于创建整个存储库的[un]稳定分支,以进行开发.是否有创建单个文件分支的机制?
对于用例,请考虑具有多个特定于平台的源(*.c)实现的公共头(*.h)文件.这种类型的分支是永久性的.所有这些分支都会看到正在进行的开发,偶尔会进行跨分支合并.这与通常具有有限寿命的不稳定的发育/稳定释放分支形成鲜明对比.
我不希望分支整个库(便宜与否),因为它会造成维护的不合理量躯干和各分支机构之间不断融合.目前我正在使用ClearCase,它具有不同的分支概念,这使得这很容易.我被要求考虑过渡到SVN,但这种范式差异很重要.我更关心能够为单个文件轻松创建备用版本,而不是像剪切稳定版本分支那样.
使用EMF,我想定义一个数据类型(EType)在我的EMF模型外部的属性.也就是说,我想要的类型是普通的手工编码Java类,它不属于我的EMF模型.使用AnySimpleType
是最后的手段.我想要比使用通用Object
提供更多的类型安全(和更少的类型转换).
Eclipse的属性编辑器将EType限制为一组预定义的值.我既不能输入自己的类名,也不能找到将我想要的类添加到选项列表中的方法.
是否可以以qr/.../x
非扩展形式打印使用扩展符号()创建的正则表达式?例如:
my $decimal = qr/
(?=\d|\.\d) # look-ahead to ensure at least one of the optional parts matches
\d* # optional whole digits
(?:\.\d*)? # optional decimal point and fractional digits
/x;
say $decimal;
Run Code Online (Sandbox Code Playgroud)
我希望将其打印为(?=\d|\.\d)\d*(?:\.\d*)?
。
我可以编写一个解析器来剥离非功能性部分,但这将复制perl已经执行的操作,而且我可能会弄错一些非平凡的情况。
(是的,这似乎有点愚蠢。我有一个用例,需要打印很多消息,例如,matched <pattern>
并且我希望将消息限制为一行,同时允许将扩展的符号用于模式。)
我有一个Perl脚本,它使用外部工具(cleartool)来收集有关文件列表的信息.我想使用IPC来避免为每个文件生成一个新进程:
use IPC::Open2;
my ($cin, $cout);
my $child = open2($cout, $cin, 'cleartool');
Run Code Online (Sandbox Code Playgroud)
返回单行的命令运行良好.例如
print $cin "describe -short $file\n";
my $description = <$cout>;
Run Code Online (Sandbox Code Playgroud)
返回多行的命令使我处于死胡同,以便如何使用整个响应而不会被阻塞读取挂起:
print $cin "lshistory $file\n";
# read and process $cout...
Run Code Online (Sandbox Code Playgroud)
我试图通过fcntl
以下方式为非阻塞读取设置文件句柄:
use Fcntl;
my $flags = '';
fcntl($cout, F_GETFL, $flags);
$flags |= O_NONBLOCK;
fcntl($cout, F_SETFL, $flags);
Run Code Online (Sandbox Code Playgroud)
但是Fcntl的消息是"你的供应商还没有定义Fcntl宏F_GETFL".
我已经尝试使用IO :: Handle进行设置$cout->blocking(0)
但失败了(它返回undef
并设置$!
为"Unknown error").
select
在尝试阅读之前,我曾试图确定是否有可用的数据:
my $rfd = '';
vec($rfd, fileno($cout), 1) = 1;
while (select($rfd, undef, undef, 0) >= 0) { …
Run Code Online (Sandbox Code Playgroud) perl ×7
java ×2
regex ×2
windows ×2
branch ×1
constants ×1
eclipse-emf ×1
ipc ×1
perl-module ×1
svn ×1