2016年3月31日 星期四

Perl调用外部命令的方式和区别

Perl调用外部命令的方式和区别
主要的方式简述如下:
1. system("command");
使用该命令将开启一个子进程执行引号中的命令,父进程将等待子进程结束并继续执行下面的代码。

2. exec("command");
效果同system命令类似,区别是不会开启子进程,而是取代父进程,因此执行完引号中的命令后进程即结束。一般和fork配合使用。

3. `command`;
使用反引号调用外部命令能够捕获其标准输出,并按行返回且每行结束处附带一个回车。反引号中的变量在编译时会被内插为其值。

4. open LIST "ls -l|";
    open MORE "|more";
    @list=<LIST>;
    print MORE @list;
    close(LIST);
    close(MORE);
使用带管道的文件句柄来执行外部命令,使用方式与读写文件类似。可以从外部命令的输出读取数据,也可以将数据输出到外部命令作为输入。

5. defined(my $pid=fork) or die "Can not fork: $!\n";
    unless ($pid) {
        exec ("date");
    }
waitpid ($pid,0);
使用fork将会开启子进程与父进程同时执行之后的代码,其中父进程中fork会返回一个非零的数,而子进程中将返回零。上面的代码完成和system("date")相同的功能。比起system单纯地调用外部命令,fork可以完成更加复杂的进程操作。

 
在Perl中用system、exec、readpipe函数来执行系统命令
在Perl中,可以用systemexecreadpipe这三个命令来调用其他脚本、系统命令等。这三个命令的主要区别就是返回值。
1) 对于system这个函数来说,它会返回执行后的状态,比如说
@args = (“command”, “arg1″, “arg2″);
system(@args) == 0
or die “system @args failed: $?”
当然,你也可以用类似于下面的语句来检查出错的原因:
if ($? == -1) {
print “failed to execute: $!\n”;
}
elsif ($? & 127) {
printf “child died with signal %d, %s coredump\n”,
($? & 127),  ($? & 128) ? ‘with’ : ‘without’;
}
else {
printf “child exited with value %d\n”, $? >> 8;
}
2) 而对于exec这个函数来说,仅仅是执行一个系统的命令,一般情况下并没有返回值。exec只有在系统没有你要执行的命令的情况下,才会返回false值。
exec (‘foo’)   or print STDERR “couldn’t exec foo: $!”;
{ exec (‘foo’) }; print STDERR “couldn’t exec foo: $!”;
3) 当我们需要保存系统命令运行的结果,以便分析并作进一步的处理时,就要用到readpipe这个函数了。例如:
@result = readpipe( “ls -l /tmp” );
print “@result”;
会产生如下的结果:
drwxr-xr-x  2 root   root    4096 Mar 19 11:55 testdir
当然,你也可以把生成的结果放到一个文件里,以便写工作日志呀、发布报告呀。
$inject_command = “./ConfigChecker.bat F:/nic/3502/ARRAY-4AD2E0573/etc “.$device_name;
chdir “F:/TestTools/bin/”;
@temp_result = readpipe($inject_command);
open(result_file,”>result.txt”);
print result_file @temp_result;
close(result_file);
这样,你就把系统运行的结果扔到了系统命令所在目录下的result.txt文件里了。

完!

2016年3月27日 星期日

Asking for Clarification

這類詞語可用來要求澄清事實,或確認您已瞭解對方的意思。
Let me make sure I understood you.
Let me see if I understand you correctly. Now is the time to sell?
They are not bringing in their own management team. Am I right? 請留意這一句詞語與其它的不同,因為它置於要確認的事項之後。當您使用 "Am I right?" 時,請記得句尾語調要上揚,以免聽起來不禮貌或唐突。
In the other words, Universal will keep restructuring to a minimum? 這一句詞語和以下的十分類似,後面要加上主詞和動詞。
Are you saying it's a good acquisition for both companies?
So what you're saying is it's a good acquisition for both companies?
So what I hear you saying is that it's a good acquisition for both comanies?

定冠詞及不定冠詞 definite and indefinite articles

定冠詞 "the" 置於單數或複數名詞之前,名詞由母音或子音開頭均可。
The company is trying to expand operations.
The operations now are limited to the U.S.

不定冠詞 "a" 與單數名詞合用,置於以子音或子音發音開頭的字之前。例如,它會置於 "uniform" 之前,因為此處 "u" 的發音為 "y"。
At his previous company, Bob was required to wear a cap and a uniform to work.

不定冠詞 "an" 與單數名詞合用,但是置於以母音發音開頭的字之前。
The assembly line has not had an accident for several months. 

"some" 可與不特定的複數名詞合用。它也能與不可數的不特定名詞合用,如下例所示 "I'd like some water"
Some supervisors and some employees felt that the strike was a bad idea.

當說話者和聽者都知道所討論的事物,或是要討論某一特定事物時,就會用定冠詞來搭配該名詞。
The memo that the boss sent us clarified much of the confusion in the office.

如果只有說話者知道所討論的事物為何,或是雙方都不知道的話,就會用不定冠詞來搭配該名詞。如果該名詞不是指特定的事物,也請用不定冠詞。
We had a meeting to discuss scheduling, but you were out of town that day.

如果連續兩次提到某一名詞,第一次提及時,該名詞前面要加不定冠詞。第二次提及該名詞時,名詞前面要加定冠詞。
We called the manufacturer for a price quote. They faxed us the quote the same day we requested it.

當 "the" 出現在子音開頭的字之前時,"e" 的發音與 "about" 中的 "a" 相同。(發音:惹)
Pronunciation tip: the memo , the boss, the confusion

當 "the" 出現在母音開頭的字之前時,"e" 的發音與 "me" 中的 "e" 相同。(發音:李)
Pronunciation tip: the office, the other day, the understanding


2016年3月26日 星期六

Global English

bring (someone) up to speed(verb phrase) = 幫﹝某人﹞跟上速度、適應狀況
to give someone recent information about something

2016年3月14日 星期一

容易誤用的英文

1. cooperate vs. collaborate。
"我們公司想和貴公司合作 (開發...)" 該怎麼說?
常見錯誤用法是 "We would like to cooperate with you on ..."
正確用法是 "We would like to collaborate with you on ..."
兩者都是 "合作",差別在哪裡?
Cooperate 是單向的合作,基本上是 "你們怎麼說,我們就怎麼做",所以其實是 "配合",通常用在 "Enron 跟執法單位合作,配合調查",或是 "伊拉克政府和美國政府合作,建立國家安全機制" 這種場合。
Collaborate 才是雙向的合作,雙方共同主導,共享成果。
所以當你和美國公司說 "we would like to cooperate with you" 的時候,他們其實在心裡竊笑:有人來獻身了...

2016年3月6日 星期日

Words in Movies

out of shape : 變形;身體不好
"Tomato, Tomahto" : Like saying "Same thing!" about two things that aren't the same at all.
Jacuzzi : 按摩浴缸(源自商標名)

標籤