Perl 學習筆記-目標操作

來源:互聯網
上載者:User

標籤:

1.在分類樹中移動.

  程式運行時會以當前工作目錄作為相對路徑的起點, 可以使用  chdir 操作符改變目前的目錄:

chdir "/etc" or die "Can‘t chdir to /etc:$!"; #因為這是一個相對作業系統的調用, 所以錯誤資訊會返回到 $! 中.

  由Perl程式啟動的所有進程都會繼承Perl程式的工作目錄. 但對於啟動Perl的進程,它的工作目錄不會隨Perl工作目錄的改變而改變, 所以無法寫出任何Perl程式來代替Shell裡的cd命令.因為一旦退出Perl程式, 又會回到開始的工作目錄.

  如果省略參數, 將回到使用者主目錄, 這是少數不以$_作為預設參數的情形之一.

2. 檔案通配名(globbing)

  命令列裡: shell會將命令列裡的檔案名稱模式展開成所有匹配的檔案名稱, 稱為檔案名稱通配, 如 echo *.txt  名令echo並不知道如何展開*txt, 因為shell會將它展開, 在Perl中也同樣適用.

  Perl程式中: 適用 glob 操作符進行檔案名稱通配.  my @all_files = glob "*"; #所有檔案   my @pm_files = glob "*.pm"; 

  glob 不會匹配以 . 號開頭的檔案名稱, 任何能在命令列上鍵入的模式都能作為參數交給glob處理, 如果要一次匹配多種模式,可以在參數中用空格隔開各個模式:  my @all_files_including_dot=glob ".* *"; 

  在glob操作符之前的方式: 使用角括弧文法 my @all_files=<*>;  和雙引號字串插入的情形類似, 角括弧內的變數也會被替換為當前變數的值, 然後按照檔案名稱通配展開成對應的檔案名稱列表.

my $dir="/etc";my @dir_files=<$dir/* $dir/.*>;

  聯想到<STDIN>表示從檔案控制代碼讀取, 那麼Perl怎麼區分是檔案名稱通配還是從檔案控制代碼讀取呢? => 規則: 如果角括弧內是滿足Perl標識符條件的,就作為檔案控制代碼讀取, 否則代表使用檔案名稱通配操作.

my @files = <FRED/*>; ## globmy @lines = <FRED>;   ## 從檔案控制代碼my $name = "FRED";my @files = <$name/*> ## globmy @files2 = <$name>  ## $name是簡單標量變數, 不是數組或雜湊, 所以也是對檔案控制代碼的讀取,Perl是在編譯時間確定的, 所以和變數的內容無關  

3. 目錄控制代碼

  與檔案控制代碼類似, 只是操作符和內容不同

  使用 opendir 代替檔案控制代碼操作符 open 

  使用 readdir 代替檔案控制代碼操作符  readline 

  使用 closedir 代替檔案控制代碼操作符  close 

  讀取到的是目錄裡的檔案名稱和子目錄名 , 而不是檔案的內容.

my $dir_to_process = ".";opendir DH, $dir_to_process or die "Can‘t! $!\n";foreach $file(readdir DH){    print "$file\n";}closedir DH;

  和檔案控制代碼一樣, 目錄控制代碼會在程式結束時自動關閉, 也會在用這個控制代碼再開啟另一個目錄前自動關閉.

4.檔案操作

  刪除:在Perl中使用 unlink 操作符來將檔案放入碎紙機,類似於Linux中的rm命令,參數是列表,返回成功地刪除了多少個檔案,可以配合萬用字元glob使用,實現一次刪除多個檔案。執行失敗時資訊儲存在變數 $!

    重新命名: rename 函數,類似mv命令,參數為列表。執行失敗返回假,資訊儲存在$!中,通常使用 or die(或 or warn)來報告

 5.建立和刪除目錄(每次只能操作一個)

  建立目錄 mkdir ,可以在建立目錄時指定許可權,如果許可權是字串,要用otc函數處理

my $name = "roger";my $perssions = "0755";mkdir $name , oct($perssions) or warn "Can‘t make directory $name : $!";

     刪除目錄 rmdir ,刪除非空目錄將會失敗。可以先用unlink刪除目錄裡面的目錄。建立臨時目錄最好包含當前進程標識符,這個代號放在 $$ 變數中,這麼做什可以防止和別的進程衝突。

  刪除分類樹:使用模組 File::Path 

use File::Path qw(make_path remove_tree);# 建立任意深度的分類樹# make_path($dir1,dir2,...)make_path(‘roger/bar/zoo‘,‘rog/dsd‘);make_path("roger/bar/zar","roger/dst/r",{ #實際過程中是一層一層建立的    verbose => 1,    error => \my $roger, #為什麼要使用反斜線    mode => 0711,    });# 刪除任意深度的分類樹,如果目錄非空會先unlink檔案remove_tree(‘roger/bar/zar‘,‘roger/dst/r‘,{    verbose => 1,    error => \my $err_list,    });

  修改檔案或目錄許可權: chmod 

  更改隸屬關係:  chown 

  修改時間戳記: utime :可以修改某個檔案的最近訪問時間來造假

 

Perl 學習筆記-目標操作

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.