似乎Embperl 1.x中有一些有效的东西在Embperl 2.x中不再受支持.举个例子:
[+ +]块现在必须包含有效的Perl表达式.Embperl 1.x允许您将多个语句放入这样的块中.出于性能原因,这是不可能的.
鉴于Embperl 1.x代码库非常庞大,是否有自动扫描.epl文件并发现不兼容性的方法?我不关心实现 - 从Embperl 2.0中的一些特殊标志到Perl :: Critic的一些插件都可以.
只要它不是马克1眼球或"切换到Embperl2,看看有什么打破":)
作为对另一个SO Q&A的评论的一部分,用户注意到:
BEGIN里面的叉子是一个可怕的前景
为什么这是一个"可怕的前景"?(在技术层面 - 让我们放弃设计的可读性或美观)
use strict;
BEGIN {
# Begin block to fork off a child process.
# This is done in BEGIN, because otherwise My::HeavyModule module
# will be loaded BEFORE the fork and thus inherited by child process
# which is something we want to avoid
my $init = 1; # Some lightweight init code
if (my $pid = fork()) {
# Nothing to do here, proceed to the rest of the main program
} else …Run Code Online (Sandbox Code Playgroud) 我有以下类结构:
DataStore类:
PStore: public abstract class PStore ...CStore1和CStore2CStore1.getInstance(Id)和CStore2.getInstance(Id)工人班:
public abstract class PWork...CWork1和CWork2现在的情况:
类CWork1实现用下面的代码访问存储一个内部类:
protected class fListener implements ActionListener {
public void actionPerformed(ActionEvent ae) {
CStore1.getInstance(Id).someMethod();
# NOTE: someMethod() is implemented in CStore2 as well
}
}
Run Code Online (Sandbox Code Playgroud)我需要实现相同的fListener类CWork2
作为一个好一点的软件开发人员,而不是简单地复制/粘贴fListener从CWork1到CWork2类,然后改变CStore1到CStore2在其代码,我决定像一个白痴将其迁移到一个父类.
我试图做的:
在PStore被调用中创建一个抽象方法getStoreInstance(int Id): …
是否存在一个强大的Java库,它实现了Perl正则表达式语法的相当大的子集?
背景:
我希望实现一个文件重命名器,其中使用Perl正则表达式重命名.
诀窍在于,包含所述重命名器作为组件的项目目前在Windows中是100%的Java.
注意:
我抛开了"安装Strawberry Perl的明显解决方法;在Perl中编写整个重命名器(或者将Perl教给开发人员进行Java编码),通过Java系统调用将文件列表重命名为Perl renamer脚本"太狡猾太明显:)
另外,请不要比较Java最新和最好的RegEx引擎如何已经足够好地完成Perl RegEx的大部分工作 - 我很清楚它的功能(并且可以谷歌); 因此我已经知道所说的陈述甚至可能是真的; 然而,与我将实际的 Perl RegEx语法实现为Java库的兴趣无关.
我有一个文件名logspath.txt,它包含在机器上的logs目录路径中.每行一个目录.虽然该目录存在,但Perl说它没有.
#!/usr/bin/perl -w
open FILE,"logspath.txt" or die $!;
while (<FILE>){
print $_;
opendir ($DIR,chomp($_)) or die $!;
Run Code Online (Sandbox Code Playgroud)
当我运行脚本时,我得到:
/home/amosa/
No such file or directory at archive.pl line 6, <FILE> line 1.
Run Code Online (Sandbox Code Playgroud)
列出目录:
~$ ls -l /home/amosa/
total 6
drwxr-xr-x 11 amosa prodapp 1024 Mar 2 12:49 deploy
drwxr-xr-x 2 amosa prodapp 512 Mar 2 12:39 lib
-rw-r--r-- 1 amosa prodapp 787 Mar 2 11:02 s
Run Code Online (Sandbox Code Playgroud)
有什么建议?
什么是向我的用户提供字符串值并让用户编辑它的简单方法...如果它不是100%正确,则不必重新键入整个字符串.
Greenspun的第十条规则是计算机编程中的常见格言,特别是编程语言圈.它指出:
任何足够复杂的C或Fortran程序都包含一个特殊的,非正式指定的,错误缠身的,一半Common Lisp的缓慢实现.
问题是,
你会认为Perl翻译是真的吗?只有客观论点(例如Common Lisp的哪些功能在解释器中实现)
独立地,是否存在完全在Perl中实现的Lisp(或者至少是一个临时的,非正式指定的,错误驱动的,一半Common Lisp的慢实现)?
Sybase有一种方法可以让应用程序将"上下文"数据(例如应用程序的最终用户名等)传递给数据库连接会话.上下文数据基本上只是一组键值对,它们通过set_appcontext/ get_appcontext存储过程存储/检索.
问题:
其他主要数据库服务器(MSSQL/Oracle/MySQL)是否具有将应用程序上下文传递给类似于Sybase的会话的工具set_appcontext?
细节:
应用程序上下文的一个特定实际用途是当您将具有中间层的应用程序作为非常特定的通用数据库用户连接到数据库时(示例包括用于在Web服务器上运行的Web应用程序后端的"webuser"/"http"或" myappserver"应用服务器的用户".
当发生这种情况时,我们仍然希望数据库会话知道END用户(例如使用app客户端的实际用户)是访问控制还是(与我的兴趣更相关),以便审计/历史触发器能够确定哪个最终用户进行了更改并将最终用户信息记录到审计表中.
请注意,信息是在会话级别设置的,这意味着在该会话中执行的任何插入/更新/删除都能够使用上下文数据,而不会将其传递给每个单独的SQL语句 - 这对于,例如,这非常重要一个触发器.
作为一个非常有用的例子,假设你有一个app服务器代表客户端启动数据库会话,你可以在其中插入/更新/删除5个不同表中的行.您希望为这5个表中的每个表都包含审计表,其中包括"哪个最终用户进行了每次更改"信息.
使用上下文数据,您只需使用触发器从应用程序上下文中检索"最终用户"数据,并将其存储为Audit表记录的一部分.在不使用应用程序上下文的情况下,您需要(1)将"最终用户"列添加到这5个表中的每一个(而不是仅审核表)和(2)将您的应用服务器更改为插入或更新set-set应用程序服务器发出的每个SQL语句中该列的值.哦,如果你要删除一行,这甚至都没有涉及到如何做到这一点.
我有一个形式的字符串数组:
@source = (
"something,something2,third"
,"something,something3 ,third"
,"something,something4"
,"something,something 5" # Note the space in the middle of the word
);
Run Code Online (Sandbox Code Playgroud)
我需要一个正则表达式,它将提取逗号分隔的第二个单词,但没有尾随空格,将第二个单词放在一个数组中.
@expected_result = ("something2","something3","something4","something 5");
Run Code Online (Sandbox Code Playgroud)
实现这一目标的最可读方式是什么?
我有3种可能性,这两种可能性都不是最佳可读性:
纯正则表达式然后捕获1美元
@result = map { (/[^,]+,([^,]*[^, ]) *(,|$)/ )[0] } @source;
Run Code Online (Sandbox Code Playgroud)在逗号上拆分(这不是CSV,因此不需要解析),然后修剪:
@result = map { my @s = split(","), $s[1] =~ s/ *$//; $s[1] } @source;
Run Code Online (Sandbox Code Playgroud)将分割和修剪放入嵌套的maps中
@result = map { s/ *$//; $_ } map { (split(","))[1] } @source;
Run Code Online (Sandbox Code Playgroud)哪一种更好?我还没有想到的任何其他更可读的替代方案?
所以假设我有4个线程,它们都循环遍历一个包含100个索引的数组,翻转每个索引中的信息位并写回该索引...
arr[];
Thread 1:
for (int i = 0; i< 100; i+=4) { flip bits of arr[i]}
Thread 2:
for (int j = 1; j< 100; j+=4) { flip bits of arr[j]}
Thread 3:
for (int k = 2; k< 100; k+=4) { flip bits of arr[k]}
Thread 4:
for (int l = 3; l< 100; l+=4) { flip bits of arr[l]}
Run Code Online (Sandbox Code Playgroud)
我是并发的总菜鸟,所以我想知道这是不是很好的做法,还是有另一种方法可以做到这一点?
更新:只是要明确 - 如果"arr [i]的翻转位"和"arr [j]的翻转位"由于某种原因触摸相同的对象/成员,答案"不是线程安全"是显而易见的(并且没有任何内容)与数组或实际问题有关),所以假设这些操作不会直接或在某些更深层次的对象中为不同的i和j对触摸相同的内存.