如果您想了解在Perl中的“打开function”和“触摸命令”之间的区别?的相关知识,那么本文是一篇不可错过的文章,我们将为您提供关于.NET正则表达式中的“组”和“捕获”之间有什么区别?、acti
如果您想了解在Perl中的“打开function”和“触摸命令”之间的区别?的相关知识,那么本文是一篇不可错过的文章,我们将为您提供关于.NET正则表达式中的“组”和“捕获”之间有什么区别?、active-directory – “新域树根”和“新子域”之间的区别?、android – Toast:“this”和“getApplicationContext()”之间的区别?、asp.net – project.json中的“依赖关系”和“框架集”之间有什么区别?的有价值的信息。
本文目录一览:- 在Perl中的“打开function”和“触摸命令”之间的区别?
- .NET正则表达式中的“组”和“捕获”之间有什么区别?
- active-directory – “新域树根”和“新子域”之间的区别?
- android – Toast:“this”和“getApplicationContext()”之间的区别?
- asp.net – project.json中的“依赖关系”和“框架集”之间有什么区别?
在Perl中的“打开function”和“触摸命令”之间的区别?
在以下两种情况下创build文件有什么不同?
open(DATA,">newfile.txt"); #1.using open function close(DATA); `touch newfile.txt`; #2.using touch command
哪一个更好,更快? 注意:在Perl脚本中同时使用open函数和touch命令,并考虑用于创build空文件。
使新文件自动可执行?
子文件夹允许的最大深度是多less?
用C ++自定义标准input到系统调用
文件按string一行input到数组中
如何检查一个文件是否存在,并在C ++中可读?
明显的区别在于,在第二种情况下,你要出门到系统。 启动一个运行该命令的shell或者通过execvp系统调用运行该命令(取决于参数,见下文)。 还有很多事情,还有一些事情可能会出错。
更重要的是,还有更多的事情要做。 如果文件已经存在? 一方面, open将截断它,而touch只会更新时间戳。 但是你想要一个新的文件,所以你需要首先检查。 如果这失败了呢? 你需要检查。 因此,这应该是一个小程序。
然后用Perl编写。 委托这样一个简单的工作没有任何好处,只有陷阱。
注意:使用三参数open
open my $fh,'>',$file
与所有必要的检查。 那么你也有一个更好的词法(间接)文件句柄来处理。
感谢hek2mgi的意见和ikegami澄清, qx可能绕过shell取决于参数(什么看起来没有文档?),就像系统一样。
这可以通过strace -f script.pl来检查,通过脚本中的qx(touch "NEW") ,我们可以找到该行
[pid 24332] execve(“/ bin / sh”,[“sh”,“-c”,“touch ”NEWFILE “”],[/ * ...
而在脚本的输出中没有/bin/sh qx(touch NEW) (没有引号,没有shell)。
要注意的是, qx确实接受一个数组(文档中没有提到),这显然是内插的。 这可以从qx(@cmd)上的strace -f输出中看到@cmd = qw(ls -l > tt.out)
[pid 30773] execve(“/ bin / sh”,[“sh”,“-c”,“ls -l> tt.out”],[/ * ...
然后,如果需要(这个例子),运行一个shell,而不是( qw(ls -l )),如上所述。
*哪一个更好更快?
这个问题没有意义。 这两个片段是不相同的,所以你应该问“哪一个做我想要的? open会open文件,如果它存在,而touch将保持不变。
至于在使用系统调用vs炮击运行一个外部命令之间哪一个更好,如果你不把这个问题的大部分代码都省略掉,答案是显而易见的!
直接使用系统调用:
utime(undef,undef,$qfn) or die("Can't touch "$qfn": $!n");
通过外部命令使用系统调用:
use String::ShellQuote qw( shell_quote ); my $cmd = shell_quote("touch","--",$qfn); my $output = `$cmd 2>&1`; die("Can't touch "$qfn": Killed by signal ".($? & 0x7F)."n" if $? & 0x7F; die("Can't touch "$qfn": Exited with error ".($? >> 8).": $output" if $? >> 8;
正如你所看到的那样,炮击远远更复杂和容易出错。 当然,启动整个程序来进行系统调用而不是仅仅进行系统调用要慢得多。
他们是两个非常不同的命令。
touch用于修改文件的访问和修改时间。 默认情况下,它将访问和修改时间设置为当前时间,如果该文件不存在,则会将其创建为空文件。
open是为了打开文件阅读或写作。 根据给定的模式,open命令也可以创建一个不存在的文件。
要使用touch手段来调用一个单独的进程(一个shell),所以给定的限制, open API命令是首选。
打开功能用于读取/写入文件。 该函数使用文件描述符,然后写入指定的文件。 而触摸功能创建一个新的文件。
open :用于读/写。
touch :用于更新/修改。
但是, touch通过实际克隆(perl克隆)来运行另一个进程来打开一个shell。
.NET正则表达式中的“组”和“捕获”之间有什么区别?
对于.NET的正则表达式语言,“组”和“捕获”之间的区别让我有些模糊。考虑以下C#代码:
MatchCollection matches = Regex.Matches("{Q}", @"^\{([A-Z])\}$");
我希望这会导致字母’Q’的单个捕获,但是如果我打印返回的属性,则会MatchCollection
看到:
matches.Count: 1matches[0].Value: {Q} matches[0].Captures.Count: 1 matches[0].Captures[0].Value: {Q} matches[0].Groups.Count: 2 matches[0].Groups[0].Value: {Q} matches[0].Groups[0].Captures.Count: 1 matches[0].Groups[0].Captures[0].Value: {Q} matches[0].Groups[1].Value: Q matches[0].Groups[1].Captures.Count: 1 matches[0].Groups[1].Captures[0].Value: Q
这到底是怎么回事?我知道整个比赛也都有机会,但是小组如何进入?为什么不matches[0].Captures
包括字母“ Q”的捕获?
答案1
小编典典您不会是第一个对此感到困惑的人。以下是著名的杰弗里·弗里德尔(Jeffrey
Friedl)所说的话(第437页以上):
根据您的观点,它要么为比赛结果添加了有趣的新维度,要么使您感到困惑和膨胀。
进一步:
Group对象和Capture对象之间的主要区别在于,每个Group对象都包含一个Captures集合,这些Collections表示
该组在匹配过程中的所有 中间 匹配项以及该组匹配的最终文本。
几页后,这就是他的结论:
在了解了.NET文档并真正理解了这些对象的内容之后,我对它们有了不同的看法。一方面,这是一个有趣的创新[..];另一方面,它似乎增加了大多数情况下不会使用的功能的效率负担[..]
换句话说:它们非常相似,但是偶尔会碰巧有它们的用处。在长出另一头灰色胡须之前,您甚至可能喜欢Captures …
由于以上内容和其他文章中的内容均未真正回答您的问题,请考虑以下内容。将Captures视为一种历史跟踪器。当正则表达式匹配时,它从左到右遍历字符串(暂时忽略回溯),当遇到匹配的捕获括号时,它将存储在$x
(x是任何数字)中,比方说$1
。
普通的正则表达式引擎在要重复捕获括号时会丢弃当前值$1
,并将其替换为新值。不是.NET,它将保留此历史记录并将其放置在.NET中Captures[0]
。
如果我们将您的正则表达式更改为如下所示:
MatchCollection matches = Regex.Matches("{Q}{R}{S}", @"(\{[A-Z]\})+");
您会注意到第一个Group
有一个Captures
(第一个组始终是整个匹配项,即等于$0
),第二个将保持{S}
,即只有最后一个匹配组。然而,这里的渔获物,如果你想找到另外两个锁扣,他们在Captures
,它包含了所有中介捕获的{Q}
{R}
和{S}
。
如果您想知道如何从多重捕获(仅显示最后一个匹配项与字符串中明显存在的单个捕获项)中获得收益,则必须使用Captures
。
关于最后一个问题的最后一句话:总比赛总有一个总夺球,不要将其与各个组混合使用。 捕获只是在小组内部有趣。
active-directory – “新域树根”和“新子域”之间的区别?
现在我必须添加第二台服务器,即第一台服务器委托的dns区域.第一台服务器是foo.com,第二台服务器是bar.foo.com
在设置过程中,我选择“现有森林”.它不是一个额外的域控制器,因此我选择“在现有林中创建新域”.然后我看到了“创建一个新的域树根而不是一个新的子域”选项.
它令我感到困惑,因为我不知道其含义是什么.
我在MS Paint中使用了所有技能来创建场景的图表表示:
以上是每个例子.在第二个例子中,两个域之间没有明确的信任,但仍然存在隐含的信任.
您必须在两者之间使用信任快捷方式,否则每当发出跨域资源请求时,都必须始终查询林根.
android – Toast:“this”和“getApplicationContext()”之间的区别?
Toast.makeText(this,"This is a toast",Toast.LENGTH_SHORT).show();
我懂了:
但是如果我使用getApplicationContext()而不是这个,
Toast.makeText(getApplicationContext(),Toast.LENGTH_SHORT).show();
我懂了:
两者都直接从活动中调用.
为什么是这样?
解决方法
如果您有理由需要使用应用程序上下文,则可以将其包装到您的活动正在使用的主题(通常设置在AndroidManifest.xml中),并且应该显示“round”的吐司.
Toast.makeText(new ContextThemeWrapper(getApplicationContext(),R.style.AppTheme),Toast.LENGTH_SHORT).show();
asp.net – project.json中的“依赖关系”和“框架集”之间有什么区别?
frameworkAssemblies和依赖关系有什么区别?
为什么dnx451使用一个和dnxcore50使用其他?
{ "version": "0.1-alpha-*",... "frameworks": { "dnx451": { "frameworkAssemblies": { ... } },"dnxcore50": { "dependencies": { ... } } }
解决方法
考虑以下示例:
我想使用ADO.NET apis(sqlConnection,sqlCommand)来处理sql Server数据库。我知道这些apis是System.Data.dll的一部分,因此要引用它。现在安装完整版本的.NET Framework后,它会在GAC中安装一些程序集(也有这个System.Data.dll),因此您可以在下面的示例中看到对框架构件的引用。来到CoreClr,我需要找出这些类型存在于哪个包中。为此,您可以使用名为PackageSearch
的网站(由ASP.NET团队成员构建),您可以在其中搜索类型并查找包名称。基于此,您将找到System.Data.sqlClient作为包。由于此软件包是为CoreClr构建的,因此它是dnxcore50部分中依赖关系部分的一部分。
{ "version": "1.0.0-*","description": "Test App","dependencies": { },"frameworks": { "dnx451": { "frameworkAssemblies": { "System.Data": "4.0.0.0" } },"dnxcore50": { "dependencies": { "System.Data.sqlClient": "4.0.0-beta-*" } } } }
现在我们来说,你甚至想在你的应用程序中添加对json序列化和反序列化的支持,并且想要引用Json.Net nuget包。 Json.Net nuget软件包支持桌面和核心clr,因此您可以将它放在两个框架通用的依赖项中。
{ "version": "1.0.0-*","dependencies": { "Newtonsoft.Json": "6.0.6" },"dnxcore50": { "dependencies": { "System.Data.sqlClient": "4.0.0-beta-*" } } } }
今天关于在Perl中的“打开function”和“触摸命令”之间的区别?的介绍到此结束,谢谢您的阅读,有关.NET正则表达式中的“组”和“捕获”之间有什么区别?、active-directory – “新域树根”和“新子域”之间的区别?、android – Toast:“this”和“getApplicationContext()”之间的区别?、asp.net – project.json中的“依赖关系”和“框架集”之间有什么区别?等更多相关知识的信息可以在本站进行查询。
本文标签: