2012-07-20 50 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具有“你好世界”的价值。