我经常忘记运行命令sudo.我正在寻找一种方法来制作一个bash函数(或别名)来重复最后一个命令sudo.就像是:
S() {
sudo $(history 1)
}
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?
可能有些写在bash脚本定界符一个Perl脚本?
这不起作用(仅限示例)
#/bin/bash
perl <<EOF
while(<>) {
chomp;
print "xxx: $_\n";
}
EOF
Run Code Online (Sandbox Code Playgroud)
这里有一些很好的方法如何将perl脚本嵌入到bash脚本中?想从bash脚本运行perl脚本,不要把它放到外部文件中.
通常,包只是简单地开始
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,但还不够深入了解下一个.
阅读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) 我是一名普通的perl程序员.我对语言本身没有问题,但是使用" 好 "的对象设计.虽然我能够理解(大多数)CPAN模块,但没有严重的问题,我甚至无法设计自己的简单对象层次结构.
示例 - 现在面对一个非常简单的应用程序(Web和命令行界面):
commands.txt)和零个或多个图像JobRepository另一个目录)的位置JobRepository到全局渲染队列(再次,另一个目录)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)
等等
正如您所看到的,它非常简单 - 但是立即面临一些决策问题,例如:
$user->send_email-来我傻,因为我们发送电子邮件给用户,而不是用户本身...JobRepo->SendJobToRenderQueue或者我应该调用一些RenderQueue->addJob方法? …我在某些来源中看到了这行代码
( $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) 我已经阅读了下一篇文章:
但可能错过了一些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到我的代码时,需要 …
想要在字典中搜索在第二个和最后一个位置具有相同字符的每个单词,并在某个中间位置搜索一次.
例子:
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) 尝试使用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)
选择了两个文件,名为:x1和x2.该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/它包含上传的两个文件.
问题是如何将两个文件都放到脚本中,而不是最后一个?
在我上一期的问题中,@ amon给出了一个很好的答案.不过,他也说过:
首先,请不要这样做
my $foo = $x if $y.您会遇到意外和未定义的行为,因此最好避免使用该语法.
因为上面的结构我在CPAN中看到了很多来源,我想知道如何,何时,哪里可能是错的.(一些示例代码会很好).想知道,为什么perl允许它,如果它是坏的.