包和模組

來源:互聯網
上載者:User

-- Start

require

如果我們有一個 date.pl,其中包含了一些關於日期操作的函數,如下:

#!/usr/bin/perlsub getToday {my (undef,undef,undef,$mday,$mon,$year) = localtime(time);return sprintf("%04d%02d%02d", $year + 1900, $mon +1, $mday);}# 必須返回一個布爾型的真值,否則 require 時會報錯return 1;

現在我想在自己的指令碼中使用 date.pl 中的函數該怎麼辦呢?很簡單,使用 require 將 date.pl 包含進來就可以了,下面是一個簡單的例子。

#!/usr/bin/perl# Perl 會在內建數組 @INC 指定的目錄中尋找檔案date.pl# 如果 @IN C中有多個目錄中含有同一個檔案,則只有第一個被包含push(@INC, "D:/Development/Perl");# 使用 require 將 date.pl 包含到我們的指令碼中require "date.pl";# 調用 date.pl 中的函數my $today = &getToday();print "Today is $today\n";

如果自己的指令碼中也有 getToday 函數會發生什麼呢?Perl 會忽略自己指令碼中的函數,而使用 date.pl 中的函數。這將導致我們無法調用自己定義的函數,那如何避免這種名字衝突呢?答案就是使用包。

我們將上面的例子稍作修改來示範包的使用。

#!/usr/bin/perl# 用包實現名字空間# 下面的例子定義了 date 包# 事實上,任何代碼都屬於某個包,如果沒有顯示指定包名,則預設屬於 main 包package date;sub getToday {my (undef,undef,undef,$mday,$mon,$year) = localtime(time);return sprintf("%04d%02d%02d", $year + 1900, $mon +1, $mday);}# 必須返回一個布爾型的真值,否則 require 時會報錯return 1;

 

#!/usr/bin/perlpush(@INC, "D:/Development/Perl");require "date.pl";# 調用 date.pl 中的函數,需要指定包名my $today = &date::getToday();print "Today is $today\n";# 調用自訂的同名函數my $today = &getToday();print "Today is $today\n";# 自定的函數sub getToday {my (undef,undef,undef,$mday,$mon,$year) = localtime(time);return sprintf("%04d-%02d-%02d", $year + 1900, $mon +1, $mday);}
模組

如果我們想把 date.pl 發布給其他人使用,我們最好將它定義成一個模組,建立模組非常簡單,使用包來建立模組。我們將上面的例子稍作修改來示範如何建立模組。

我們將 date.pl 改名為 date.pm,其他不做任何修改。下面的例子示範如果使用 date.pm 模組。

#!/usr/bin/perl# 使用模組use date;# 調用 date 模組中的函數my $today = &date::getToday();print "Today is $today\n";# 調用自訂的同名函數my $today = &getToday();print "Today is $today\n";# 自定的函數sub getToday {my (undef,undef,undef,$mday,$mon,$year) = localtime(time);return sprintf("%04d-%02d-%02d", $year + 1900, $mon +1, $mday);}
use 和 require 的區別

use 和 require 都可以將模組匯入到我們的程式中,它們之間的區別在於,無論 use 處於指令碼的何處,它總是在其他語句執行之前執行,而 require 語句執行的時機和它所處的位置有關。

 

-- 更多參見:Perl 精萃

-- 聲 明:轉載請註明出處
-- Last Updated on 2012-07-07
-- Written by ShangBo on 2012-07-07
-- End

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.