讀取標準輸入():鍵盤輸入,回車分行,ctrl+c截止
例:while()
foreach()
簡單寫法,將輸入處理到結尾,不同的是while是取一行處理一行,foreach是全部取出之後再一行行處理。都是每一行作為一條資料,存在預設變數$_中。
鑽石操作符(<>):
例: while(<>)
它可以讀取乙個檔案(一行行讀取),每一行存在預設變數$_中,需要在執行的時候給出要操作的檔案。
在windows中的操作方法:開啟cmd,輸入:
perl程式.pl 處理檔案1 處理檔案2... (可以有更多要操作的檔案,如果不在當前目錄下,要把程式和處理檔案的絕對路徑寫下來)。
呼叫引數:
因為呼叫的檔案(注意是檔案,也就是cmd執行時要操作的那一串檔案)都是事先存放在@argv陣列中,所以如果改變了@argv,無論你呼叫什麼引數執行,只會執行你改變後的檔案,如在**中加入下面一行:
@argv = qw # f:/editplus/old/a.txtf:editplus/old/b.txt#
這樣,無論你執行是的引數是什麼,都會且只操作a.txt和b.txt
輸出到標準輸出(print):
① print "字串", n+m, "字串"; ——無論是字串,表示式,還是標量都可以一起輸出出來 ②
print @陣列名; —— 無間隔把陣列列印出來
print "@陣列名"; ——先把陣列變成字串,即以空格分隔成乙個字串,再輸出,因此這種有間隔
print "@陣列名\n"; —— 有換行符輸出 ③
print <>; ——輸出檔案內容,相當於unix下的cat
print sort <>; —— 排序輸出檔案內容
④ print的返回值是0或1,代表輸出是否成功,一般返回1
⑤print後面有括號的時候,像函式,那就是函式 例:
print (2+3)*4; 相當於
(print(2+3))*4,結果為4(因為print返回值為1)。用print時要記得它本身是有括號的,只是可以省略。
用printf格式化輸出:
可以像c語言一樣,用格式字串(如%s,%d,m等)
%g ——浮點數,整數,指數
%d ——十進位制整數(如果放入格式之前是小數,就會捨去小數,是捨去,不是四捨五入)
%s ——字串
%f ——浮點數(會四捨五入,可以指定小數點後的位數)
%% ——%
除了%f和%%都可以帶數字,表示數的長度,正數的話,多出的位數空格往左加,負數空格往右加,%f如果加數字,第乙個數字是長度,第二個數字是小數的位數,以「.」分開。
例:〇代表空格
printf "m\n",42; —— 〇〇〇〇42
printf "%-10s\n","abcde"; —— abcde〇〇〇〇〇
printf ".3f\n",6*7+2/3; —— 〇〇〇〇〇〇42.667
陣列和printf:
例: printf "the itemsare:\n".("s\n"x@items),@items;
第1個@items是陣列長度,就是要把s\n重複3次,第2個是陣列的值,這樣即使不確定陣列元素個數也能格式化輸出。
檔案控制代碼:
用來以固定格式輸入輸出。
命名規範:雖然沒有特殊要求,但盡量全大寫命名,避免與保留字衝突。
6個特殊檔案控制代碼:stdin、stdout、stderr、data、argv、argvout
建立檔案控制代碼(開啟):
檔案控制代碼只要開啟,就可以定義他的名字和執行方式,使用open。
例:open config, 'dion'; ——開啟,名為config檔案控制代碼,指向檔案dino
open config, ' —— 指定了它是讀取檔案
open bedrock, '>fred'; ——指定輸出到新檔案,如果是有這個檔案,清除原檔案
open log, '>>logfile'; ——以追加的方式寫入,沒有,新建檔案,如果存在,新增到最檔案後面
以二進位制的方式讀寫檔案控制代碼:
binmode 檔案控制代碼名, '編碼方式';
例: binmode stdout, ':encoding(utf-8)'; ——讀寫都能用
關閉檔案控制代碼:close檔案控制代碼名; (通常都會自動關閉)
用die處理致命錯誤:
一般處理檔案都會返回乙個狀態,非0代表不成功,只有0是成功,因此可以判斷它不是0的時候用die()方法終止程式。
例:if(! open log,'>>','logfile')
$!是錯誤資訊,後面還會自動加程式名和行號
用warn送出警告資訊:
和die差不多,只是不會終止。
自動檢測致命錯誤:
use autodie;
——如果open失敗,自動啟動die
使用檔案控制代碼:
例: if(! open passwd,"/etc/passwd")
while()
改變預設的檔案輸出控制代碼:
如果不指定檔案控制代碼,預設輸出送到stdout。
改變:select檔案控制代碼; —— 用過還要設回預設stdout
例:select log;
$1 = 1;
select stdout;
print log "...";
這樣當前的預設檔案控制代碼在每次進行輸出後like重新整理緩衝區
重新開啟標準檔案控制代碼:
如果已經開啟了檔案控制代碼:
open stderr
用下面程式重新開啟,並將錯誤資訊寫到自己的檔案中:
if (! open stderr, ">> /home/barney/error.log")
如果開啟新的(或重新開啟)檔案控制代碼,就會關閉之前的,如果在重新開啟之前就出錯,錯誤資訊還是會到之前的地方,也就是說只有成功開啟後,才貴關閉之前的檔案控制代碼。
用say來輸出:
例: use 5.010; #這樣才能用
say "hello!";
say $變數名;
say "@array";
和print差不多,只是有自動換行
標量變數中的檔案控制代碼:
可以用標量變數做檔案控制代碼,而不用裸字。
例:open my $rocks_fh, '<', rocks.txt or die"could not openk rodks.txt:$!";
使用:while (<$rocks_fh>)
Perl 中的輸入與輸出
1.讀取標準輸入 簡單實用例子 example1 while defined line print here is the input line 如果要結束鍵盤輸入 用ctrl d 2.鑽石操作符 代表行輸入,只不過不是從鍵盤取得輸入 而是從使用者指定的位置讀取。讀入的內容可以在 看到。呼叫引數,鑽...
perl學習筆記 輸入與輸出
注意 1,會處理所有的輸入,直到所有輸入的結尾為止 一般在乙個程式中只有乙個 若出現多次則可能發生錯誤。2,呼叫引數 ar ar 是乙個裝著呼叫引數的陣列 1,讀取從鍵盤輸入的值 注意 只讀取鍵盤輸入的一行,到換行符結束 用chomp去掉換行符 若沒有賦值給變數,則預設存在 中 usr bin pe...
perl學習 5 輸入和輸出
行輸入操作在到達檔案的結尾時將返回 undef 在while迴圈的條件中不能使用chomp while defined line 在迴圈的內部,我們將看到每一行,一行接著一行,perl提供簡寫 while while defined 兩者是等同的 在進行深入討論前,我們要澄清一些事 這種簡寫只在特定...