小编Mic*_*man的帖子

如何让我的Perl脚本像Windows上的普通程序一样?

我希望我的Perl脚本的行为与任何其他可执行文件(*.exe文件)一样.

  • 当我双击时,myscript.pl我希望它执行而不是在文本编辑器中打开.
  • 我想跑myscript.pl而不是perl myscript.pl.
  • 我真的想跑myscript而不是myscript.pl.
  • 我想跑program | myscript而不是program | perl myscript.pl.
  • 我希望能够通过拖放操作来运行我的脚本.

您必须在Windows上进行许多更改才能使所有这些工作正常进行.用户通常偶然发现的东西,工作,一次一个; 让他们感到困惑,他们是否犯了错误,Perl中存在错误,Windows中存在错误,或者他们想要的行为是不可能的.这个问题旨在提供一个单一的参考点,使一切工作在前面; 理想情况下,在这些问题发生之前.

相关问题:

windows perl

37
推荐指数
2
解决办法
3万
查看次数

如何从数组引用中获取切片?

让我们说我们有以下数组:

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)

perl

27
推荐指数
3
解决办法
1万
查看次数

21
推荐指数
5
解决办法
2077
查看次数

正则表达式只用一个替换两个(或多个)连续字符?

在java中,可以使用哪个正则表达式来替换它们,例如:

之前:aaabbb之后:ab

之前:14442345之后:142345

谢谢!

java regex

20
推荐指数
2
解决办法
2万
查看次数

在Perl中使用常量

我试图使用constantpragma 在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 constants

13
推荐指数
1
解决办法
2万
查看次数

内置插件的内联文档?

我遇到了一种情况,我无法以直观的方式禁止警告,因为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)

perl

10
推荐指数
2
解决办法
198
查看次数

如何在SVN中分支单个文件?

分支的颠覆概念似乎侧重于创建整个存储库的[un]稳定分支,以进行开发.是否有创建单个文件分支的机制?

对于用例,请考虑具有多个特定于平台的源(*.c)实现的公共头(*.h)文件.这种类型的分支是永久性的.所有这些分支都会看到正在进行的开发,偶尔会进行跨分支合并.这与通常具有有限寿命的不稳定的发育/稳定释放分支形成鲜明对比.

希望分支整个库(便宜与否),因为它会造成维护的不合理量躯干和各分支机构之间不断融合.目前我正在使用ClearCase,它具有不同的分支概念,这使得这很容易.我被要求考虑过渡到SVN,但这种范式差异很重要.我更关心能够为单个文件轻松创建备用版本,而不是像剪切稳定版本分支那样.

svn version-control branch

9
推荐指数
2
解决办法
1万
查看次数

如何创建数据类型不是EMF类的EAttribute?

使用EMF,我想定义一个数据类型(EType)在我的EMF模型外部的属性.也就是说,我想要的类型是普通的手工编码Java类,它不属于我的EMF模型.使用AnySimpleType是最后的手段.我想要比使用通用Object提供更多的类型安全(和更少的类型转换).

Eclipse的属性编辑器将EType限制为一组预定义的值.我既不能输入自己的类名,也不能找到将我想要的类添加到选项列表中的方法.

java eclipse-emf

8
推荐指数
2
解决办法
3779
查看次数

如何以未展开形式打印展开的正则表达式?

是否可以以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>并且我希望将消息限制为一行,同时允许将扩展的符号用于模式。)

regex perl

7
推荐指数
1
解决办法
97
查看次数

如何在Windows上进行非阻塞IPC读取?

我有一个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)

windows perl ipc

6
推荐指数
1
解决办法
2274
查看次数