伙计我在Perl中有这个正则表达式,我不明白.
s/\w+$/($`!)$&/;
Run Code Online (Sandbox Code Playgroud)
原来的字符串是
"huge dinosaur"
Run Code Online (Sandbox Code Playgroud)
在执行正则表达式之后,字符串现在是:
"huge (huge !)dinosaur"
Run Code Online (Sandbox Code Playgroud)
我完全不明白这是怎么回事.我不明白&符号在那里做什么.我理解$`,但为什么它就在那里,我知道$`在匹配前获取值,这是我认为没有,因为在上面的正则表达式之前没有匹配的表达式.
如果有人可以链接我一些关于Perl正则表达式的非常有用的教程,我真的很感激.
谢谢
编辑:我现在明白了&符号意味着什么,它保存了比赛和$`在比赛前保存了价值,现在我不理解的是整个部分:
($`!)$&
Run Code Online (Sandbox Code Playgroud)
这个部分是怎么变成的
(huge !)
Run Code Online (Sandbox Code Playgroud) 伙计们如何使用单个命令在vim中打开多个文件?
我要打开的这些文件有某种模式,例如:
myfile1dsa
myfile2dsdas
myfile3xzczxcz
Run Code Online (Sandbox Code Playgroud)
还有这些打开的文件在我的vim窗口中创建自己的选项卡吗?
并且超出主题问题:
什么" - "在linux命令中意味着什么?它与" - "的区别如何?
例:
grep --color 'data' fileName
Run Code Online (Sandbox Code Playgroud) 如果CTRL+A
+ a
是如何移动到屏幕中一行的开头那么除了End
屏幕中的键之外,什么是快捷键到达行尾.
我在vim中尝试过CTRL+A
+ I
.没运气.
另外OT:如果退出shell,会话会持续吗?
我对Linux中的这个$ PATH有几个问题.
我知道它告诉shell哪些目录要搜索可执行文件,所以:
嗨,我是vim的新手,我不知道缓冲区和窗口是什么.我找不到任何关于如何理解这两个的教程,所以这是我的问题:
伙计们真的很困惑如何使用我刚安装在Perl中的模块.
我在Perl中安装了Corelist模块.我想显示Perl 5.006附带的所有模块.但是通过使用我不理解的代码有一个暗示:
my %modules = %{ $Module::CoreList::version{5.006} };
Run Code Online (Sandbox Code Playgroud)
但是当我这样做的时候
#! usr/bin/perl
use warnings;
use strict;
my %modules = %{$Module::CoreList::version{5.006}};
print %modules;
Run Code Online (Sandbox Code Playgroud)
它给出了这个错误:Module::CoreList::version used only once
.我也尝试过
use Module::CoreList;
仍然没有运气
假设我想用"橙色"替换"apple"这个词,用"apple"替换"orange"这个词,我怎样通过正则表达式在Perl中做到这一点?
这是我的代码,我没有运气:
while (<MYFILE>) {
if (/apple/i) {
s/$&/orange/i;
}
if(/orange/i) {
s/$&/apple/i;
}
}
Run Code Online (Sandbox Code Playgroud)
上面的代码可以工作,我想如果有某种方法来终止if函数,如果它是成功的,并且不再执行代码强制它返回到while循环.但我确定这是一种简单的正则表达方式.
伙计们试图使用stat查看perl中某个文件的权限.
所以当我这样做的时候
foreach (@original_files) {
my($dev, $ino, $mode, $nlink, $uid, $gid, $rdev,
$size, $atime, $mtime, $ctime, $blksize, $blocks) = stat ($_);
print "$mode \n";
}
Run Code Online (Sandbox Code Playgroud)
这个输出:
33204 which corresponds to the permission -rw-rw-r--
Run Code Online (Sandbox Code Playgroud)
我不明白为什么它是33204. < - 这是我的第一个问题
接下来我尝试将$ mode转换为octal,我知道这是umask的数字系统.
这是我的代码:
printf ("%0\n",$mode);
Run Code Online (Sandbox Code Playgroud)
现在这输出100664,我完全低于最后3位数(rw-rw-r--)但我不明白前三位数来自哪里(100664中的100) 这是我的第二个问题
最后是我再次尝试此代码:
printf ("%o\n", $mode & 775); #im not sure about the 775, or is it 577
Run Code Online (Sandbox Code Playgroud)
最后一个代码是我想要的.它输出664.我的问题是为什么当我和$模式忘记了价值(775或其他)时,它会输出正确的权限.
而OT问题:$ _和@_的区别是什么?