Greenspun的第十条规则是计算机编程中的常见格言,特别是编程语言圈.它指出:
任何足够复杂的C或Fortran程序都包含一个特殊的,非正式指定的,错误缠身的,一半Common Lisp的缓慢实现.
问题是,
你会认为Perl翻译是真的吗?只有客观论点(例如Common Lisp的哪些功能在解释器中实现)
独立地,是否存在完全在Perl中实现的Lisp(或者至少是一个临时的,非正式指定的,错误驱动的,一半Common Lisp的慢实现)?
:paranoid => false 在Net :: SSH.start()似乎不起作用
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语句中该列的值.哦,如果你要删除一行,这甚至都没有涉及到如何做到这一点.
假设我有一个文件xx.txt,它包含数据
1 I am here
2 to work in
3 Perl for writing
4 a script for
5 myself
Run Code Online (Sandbox Code Playgroud)
假设我想搜索字符串脚本并想要显示它上面的三行,我该怎么办?
我有一个形式的字符串数组:
@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)哪一种更好?我还没有想到的任何其他更可读的替代方案?
看起来字符串上下文(虽然是真实的,并且在"编程Perl"章节"2.7.1.标量和列表上下文"中作为标量上下文的子概念提到),但在我能够找到的任何地方都没有清楚地记录在Perldoc.
显然,Perl中的一些东西(例如eqoperator,或qq //引用插值)会将值强制转换为字符串上下文.
Perl什么时候强加字符串上下文?
perldoc似乎没有任何有用的答案.
所以假设我有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对触摸相同的内存.
你好我怎么能在当前视图中调用一个在当前视图的superview的viewcontroller中实现的方法?你能帮我吗.感谢名单
我知道很多Y2K的努力/恐慌都以COBOL为中心,当之无愧.(哎呀,我在2000年1月1日的Perl脚本中看到了轻微的Y2K错误)
我感兴趣的是,COBOL是否有某种特定的语言使其容易受到Y2K问题的影响?
也就是说,与仅仅写入其中的大多数程序的时代相反,以及随后需要减少由旧硬件驱动的内存/磁盘使用量以及没有人预计这些程序能够存活30年的事实?
如果答案是"除了年龄之外没有COBOL特有的东西",我感到非常高兴 - 只是好奇,对COBOL一无所知.
简介:我正在寻找一个快速的XML解析器(很可能是一些标准SAX解析器的包装器),它将生成与XML :: Simple生成的每个记录数据结构100%相同的每个记录数据结构.
细节:
我们有一个庞大的代码基础结构,它依赖于处理记录,并且希望记录是XML :: Simple生成的格式的数据结构,因为它从早期的侏罗纪时代就一直使用XML :: Simple.
一个简单的XML示例是:
<root>
<rec><f1>v1</f1><f2>v2</f2></rec>
<rec><f1>v1b</f1><f2>v2b</f2></rec>
<rec><f1>v1c</f1><f2>v2c</f2></rec>
</root>
Run Code Online (Sandbox Code Playgroud)
例如粗略的代码是:
sub process_record { my ($obj, $record_hash) = @_; # do_stuff }
my $records = XML::Simple->XMLin(@args)->{root};
foreach my $record (@$records) { $obj->process_record($record) };
Run Code Online (Sandbox Code Playgroud)
众所周知,XML :: Simple很简单.更重要的是,由于是一个DOM解析器并且需要在内存中构建/存储100%的数据,因此它非常慢且内存耗尽.因此,它不是解析包含大量小记录的XML文件的最佳工具.
但是,重写整个代码(包含大量"process_record"类似方法)来使用标准SAX解析器似乎是一项不值得资源的大任务,即使以使用XML :: Simple为代价也是如此.
我正在寻找一个现有的模块,它可能基于一个SAX解析器(或任何快速,内存占用很少),可以用来$record根据上面的图片逐个生成hashrefs,可以传递给$obj->process_record($record)100 %与XML :: Simple的hashrefs相同.
我不在乎新模块的界面是什么; 例如,我是否需要调用next_record()或给它一个接受记录的回调代码.