小编Nem*_*emo的帖子

用"sudo"重复上一个命令

我经常忘记运行命令sudo.我正在寻找一种方法来制作一个bash函数(或别名)来重复最后一个命令sudo.就像是:

S() {
    sudo $(history 1)
}
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?

bash

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

Bash的HereDoc中的Perl脚本

可能有些写在bash脚本定界符一个Perl脚本?

这不起作用(仅限示例)

#/bin/bash
perl <<EOF
while(<>) {
    chomp;
    print "xxx: $_\n";
}
EOF
Run Code Online (Sandbox Code Playgroud)

这里有一些很好的方法如何将perl脚本嵌入到bash脚本中?想从bash脚本运行perl脚本,不要把它放到外部文件中.

bash perl

19
推荐指数
1
解决办法
9167
查看次数

"标准"和块包装声明之间有什么区别吗?

通常,包只是简单地开始

package Cat;
... #content
!0;
Run Code Online (Sandbox Code Playgroud)

我刚刚发现,从perl 5.14开始,还有"块"语法.

package Cat {
    ... #content
}
Run Code Online (Sandbox Code Playgroud)

它可能是一样的.但是可以肯定的是,有什么区别吗?

关于1;包文件的末尾.任何块的返回值都被视为最后一个计算表达式的值.所以我可以1;在结束之前把它放进去}吗?为了require开心,两者之间有什么区别:

package Cat {
    ... #content
    1; 
}
Run Code Online (Sandbox Code Playgroud)

package Cat {
    ... #content 
}
1;
Run Code Online (Sandbox Code Playgroud)

perl

17
推荐指数
2
解决办法
296
查看次数

奇怪的perl代码 - 寻找解释

我知道一点perl,但还不够深入了解下一个.

阅读perldelta 5.18我发现了5.18已经禁用的下一段代码.不计算这个,仍然想了解它是如何工作的.

这是代码,在评论中是我理解的

%_=(_,"Just another "); #initialize the %_ hash with key=>value   _ => 'Just another'
$_="Perl hacker,\n";    #assign to the $_ variable with "Perl..."
s//_}->{_/e;            # darkness. the /e - evauates the expression, but...
print
Run Code Online (Sandbox Code Playgroud)

它打印:

Just another Perl hacker,
Run Code Online (Sandbox Code Playgroud)

我试过了,perl -MO=Deparse然后得到了下一个

(%_) = ('_', 'Just another ');   #initializing the %_ hash
$_ = "Perl hacker,\n";           # as above
s//%{'_';}/e;                    # substitute to the beginning of the $_ - WHAT? …
Run Code Online (Sandbox Code Playgroud)

obfuscation perl

14
推荐指数
1
解决办法
1019
查看次数

Perl/Moose OO设计,包层次结构

我是一名普通的perl程序员.我对语言本身没有问题,但是使用" "的对象设计.虽然我能够理解(大多数)CPAN模块,但没有严重的问题,我甚至无法设计自己的简单对象层次结构.

示例 - 现在面对一个非常简单的应用程序(Web和命令行界面):

  • 已经过身份验证的学生上传了一个zip文件(包含渲染作业的内容)
  • 将文件解压缩到新目录并检查其内容(应该包含一个文件commands.txt)和零个或多个图像
  • 如果内容正常 - 将目录移动到名为:( JobRepository另一个目录)的位置
  • 如果用户决定运行渲染作业 - 将作业从他自己的作业发送JobRepository到全局渲染队列(再次,另一个目录)
  • 另一个进程从队列中获取作业(fifo - 使用IPC :: DirQueue设计)并执行渲染过程
  • 完成后,将结果放入users JobRepository/result目录
  • 向用户发送电子邮件
  • 学生可以下载压缩的结果

bash它是可行的少数" 不复杂 " bash脚本-但我想这样做在Perl(因为网络接口) -并希望实践Perlish的(麋鹿)对象设计...

这里开始我的问题.

尝试"视觉" 名词分析方法,并制作下一个图像.

在此输入图像描述

发布图片,因为它"更短"为:

package Iren::JobRepo;
use Moose;
use warnings;
has 'Jobs' => (is => 'rw', isa=>ArrayRef[Iren::Job]);
…
method AddJob {
...
}
Run Code Online (Sandbox Code Playgroud)

等等

正如您所看到的,它非常简单 - 但是立即面临一些决策问题,例如:

  • 什么对象应该做unzip/zip/checkJob方法?它属于:JobRepository ot Job"zips"本身?
  • 什么对象应该向用户发送电子邮件?的$user->send_email-来我傻,因为我们发送电子邮件给用户,而不是用户本身...
  • "谁"应该将Job从用户的JobRepo发送到RenderQueue?在JobRepo->SendJobToRenderQueue或者我应该调用一些RenderQueue->addJob方法? …

perl moose

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

无论有没有删除,都可以保留一个有福的哈希成员

我在某些来源中看到了这行代码

( $self->{arg} ) = ( ( delete $self->{arg} ) =~ /(.*)/s ) if ${^TAINT}; 
Run Code Online (Sandbox Code Playgroud)

我理解无意义.我也知道删除

我的问题是,在什么情况下使用它是必要的或者是优选的delete,并且使用更简单的东西是不够的

( $self->{arg} ) = ( ( $self->{arg} ) =~ /(.*)/s ) if ${^TAINT};
Run Code Online (Sandbox Code Playgroud)

例如

#!/usr/bin/env perl -T

use 5.014;
use warnings;

package Some {
    use Moose;
    has 'arg' => (is => 'rw', isa => 'Str');
    sub doit {
        my $self = shift;
        #( $self->{arg} ) = ( ( delete $self->{arg} ) =~ /(.*)/s ) if ${^TAINT};
        ( $self->{arg} ) = …
Run Code Online (Sandbox Code Playgroud)

perl hash taint

12
推荐指数
1
解决办法
165
查看次数

open:utf8 pragma如何在perl中工作 - 与CPAN模块有关?

我已经阅读了下一篇文章:

但可能错过了一些BASIC积分.

使用

use open(:utf8);
Run Code Online (Sandbox Code Playgroud)

影响cpan模块呢?例如,当某个CPAN模块打开任何文件时,它将打开:utf8?这个陈述是真的吗?(或者open pragma只是词法范围?)AFAIK - 它也影响模块,但是以"不一致"的方式...(可能是模块的问题).

open pragma效果opendir吗?- 我已经尝试过的 - - 我仍然需要额外decode的所有文件名来源readdir(除了NFC).所以,IO :: Dir是不同的东西 - open pragma不包含什么?

影响开放的pragma sockets,管道呢?(例如什么是IO :: Handle?)

所有(或大多数)CPAN模块都知道何时进行i/o他们需要怎么做(utf8或lattin1或raw?)(可能不是,因为一个简单的autodie不适用于openpragma ...... :()

在许多地方,我可以阅读类似的规则:记住Unicode的规范规则:始终在应用程序的边缘编码/解码.这是一个很好的规则 - 但应用程序边缘意味着:我自己的源代码.CPAN模块(通常)也在边缘之后 - 不仅仅是"外部世界",如系统或网络......

根据我的经验,我的短脚本(大量使用CPAN)的内容的3/4包含:顶级声明,以及几乎所有的几十种编码/解码/ NFC ......

例如:即使是日志记录工具,也需要显式编码

use Log::Any qw($log);
use Log::Any::Adapter ('File', 'file.log');
$log->error( encode('utf-8', "tökös"));
Run Code Online (Sandbox Code Playgroud)

甚至,当想要添加tie到我的代码时,需要 …

perl

11
推荐指数
1
解决办法
553
查看次数

找到重复字符的单词

想要在字典中搜索在第二个和最后一个位置具有相同字符的每个单词,并在某个中间位置搜索一次.

例子:

statement - has the "t" at the second, fourth and last place
severe = has "e" at 2,4,last
abbxb = "b" at 2,3,last
Run Code Online (Sandbox Code Playgroud)

错误

abab = "b" only 2 times not 3
abxxxbyyybzzzzb - "b" 4 times, not 3
Run Code Online (Sandbox Code Playgroud)

我的grep不起作用

my @ok = grep { /^(.)(.)[^\2]+(\2)[^\2]+(\2)$/ } @wordlist;
Run Code Online (Sandbox Code Playgroud)

例如

perl -nle 'print if /^(.)(.)[^\2]+(\2)[^\2]+(\2)$/' < /usr/share/dict/words
Run Code Online (Sandbox Code Playgroud)

打印例如

zarabanda
Run Code Online (Sandbox Code Playgroud)

怎么了.

什么应该是正确的正则表达式?

编辑:

如何捕捉封闭的群体?例如为了

statement - want cantupre: st(a)t(emen)t - for the later use

my $w1 = $1; my w2 …
Run Code Online (Sandbox Code Playgroud)

regex perl

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

使用Plack处理多个文件上传

尝试使用Plack处理多个文件上传.

我的表格:

<form id="file_upload" action="savefile" method="POST" enctype="multipart/form-data">
<input type="file" name="file[]" multiple>
<button>upload</button>
</form>
Run Code Online (Sandbox Code Playgroud)

选择了两个文件,名为:x1x2.该Data::Dumper结果:

my $u = $req->uploads;
Run Code Online (Sandbox Code Playgroud)

$VAR1 = bless( {
    'file[]' => bless( {
         'headers' => bless( {
              'content-disposition' => 'form-data; name="file[]"; filename="x2"',
              'content-type' => 'application/octet-stream',
              '::std_case' => {
                   'content-disposition' => 'Content-Disposition'
              }
         }, 'HTTP::Headers' ),
         'filename' => 'x2',
         'tempname' => '/var/folders/7l/nhyscwy14bjb_sxr_t2gynpm0000gn/T/7vt04wIrne',
         'size' => 146
    }, 'Plack::Request::Upload' )
}, 'Hash::MultiValue' );
Run Code Online (Sandbox Code Playgroud)

因此,它只包含第二个文件x2,但在选中时,/var/folders/7l/nhyscwy14bjb_sxr_t2gynpm0000gn/T/它包含上传的两个文件.

问题是如何将两个文件都放到脚本中,而不是最后一个?

perl plack

8
推荐指数
1
解决办法
805
查看次数

"my $ foo = $ x if $ y"语法有什么问题?

在我上一期的问题中,@ amon给出了一个很好的答案.不过,他也说过:

首先,请不要这样做my $foo = $x if $y.您会遇到意外和未定义的行为,因此最好避免使用该语法.

因为上面的结构我在CPAN中看到了很多来源,我想知道如何,何时,哪里可能是错的.(一些示例代码会很好).想知道,为什么perl允许它,如果它是坏的.

perl

8
推荐指数
1
解决办法
292
查看次数

标签 统计

perl ×9

bash ×2

hash ×1

moose ×1

obfuscation ×1

plack ×1

regex ×1

taint ×1