2012-07-20 43 views
1

我試圖用1包括兩個文件的Perl和PHP導入php.inc文件到Perl程序

是否有進口的perl內myphp.inc文件的好方法?

$ cat myphp.inc 
<?php 
    $some_var="hello world"; 
?> 

用我的test.php的上述工作正常:

include "myphp.inc"; 

如果我刪除<? PHP則test.php的將剛剛打印出來的myphp.inc文件的內容......如果我離開他們,然後我的Perl程序抱怨有:

Unterminated <> operator 

我見過的Perl模塊:PHP ::包括但我希望儘可能遠離外部模塊。

任何人都有這樣做的想法??

回答

9

不要試圖編寫既是PHP又是Perl的代碼,它們是不同的語言,即使它們有一些共享的祖先。如果您想在兩者之間共享數據,請使用結構化數據格式。 JSON是一種流行的味道。 PHP有parse_json,Perl有JSON模塊。

我想如果可能的話

代碼重用是一種美德,從外部模塊遠離......雖然沒有什麼能夠阻止你從頭開始重新實現模塊。

+0

我真的只是想爲兩者設置一些全局變量,所以我不必編輯我的perl.inc和php.inc文件。 – Douglas 2012-07-20 16:46:59

+0

@Douglas - 我的回答站立。 – Quentin 2012-07-20 16:47:37

+0

嗯我不知道我買這個...所以當我有一些global'ish變量像$ MAX_ROWS和$ CUSTOMER_SOMETHING(總共多達30個變量),我的php和perl prog使用,我應該編碼這些一些其他的格式和閱讀他們(即JSON?)...這似乎是過度殺傷 – Douglas 2012-07-20 17:04:31

1

理想情況下,您可以將共享/配置數據以PHP和Perl易讀的格式進行存儲。 XML,JSON或帶有鍵值對的簡單文本文件(如simbabque所建議的.ini文件中的那樣)會很好。

如果你決心要讀在Perl PHP文件,但你不希望使用一個模塊,例如PHP ::包括然後你留下了寫這樣的事情:

use IO::File; 

sub require_php { 
     my $source_filename = $_[0]; 
     my $dest_filename = 'temp.inc.pl'; 
     open my $source, $source_filename or die "Could not open $source_filename: $!"; 
     open my $destination, '>>'.$dest_filename or die "Cound not open file for writing"; 
     while(my $line = <$source>) { 
       if(index($line,'<?php')==-1 && index($line,'?>')==-1) { 
         print $destination $line 
       } 
     } 
     close $destination; 
     close $source; 
     require $dest_filename; 
     unlink $dest_filename; 
} 

our $some_var = ''; 
require_php('myphp.inc'); 

這將結束與$some_var具有「你好世界」的價值。