ОБНОВЛЕНИЕ: извинения за неправильное место, которое я выбрал, чтобы положить вещи. Я не заметил этих добавлений, упомянутых @Sinan, возможно, они были заблокированы моим браузером. Во всяком случае, я удалил ссылки сейчас. и спасибо вам ребята :) 1001 *
В моем [предыдущем посте] [1] @daotoad упомянул встроенный модуль. Теперь я играю с этим. Ну, на самом деле, за исключением Perl, я практически ничего не знаю ни о каких других языках программирования. Сценарий написан для чистого удовольствия. Я хочу посмотреть, смогу ли я просто добавить в свой Perl-скрипт код, написанный на другом языке программирования, и каким-то образом заставить его работать.
Ну, я скопировал исходный код CPP, который я нашел в сети, в мой Perl-скрипт, и я пытался заставить его работать, но все, что я получаю, - это скрин с сообщением об ошибке:
Похоже, что-то подозрительно с импортированной библиотекой CPP, но я не уверен. Следующая информация является частью информации об ошибке, которая попалась мне на глаза:
E:/solarlunar.h:53: error: expected identifier before "false"
E:/solarlunar.h:53: error: expected `}' before "false"
E:/solarlunar.h:53: error: expected unqualified-id before "false"
E:/solarlunar.h:53: error: expected declaration before '}' token
In file included from _3_pl_62cb.xs:19:
E:/solarlunar.h:1:1: unterminated #ifndef
NMAKE : fatal error U1077: 'C:\WINDOWS\system32\cmd.exe' : return code '0x1'
Stop.
A problem was encountered while attempting to compile and install your Inline
CPP code. The command that failed was:
nmake > out.make 2>&1
Я проверил 53-ю строку файла solarlunar.h и после небольшого гугла о том, что это может означать, я думаю, что эта строка выглядит довольно невинно, но, как и полный новичок в C ++, я не уверен:
**typedef enum boolean { false = 0, true = 1 } boolean;**
Я попытался скомпилировать и протестировать код C ++ с помощью DEV-C ++, и все заработало, как и ожидалось.
Мой скрипт (обновленный) такой:
#Inline-Test.pl
use warnings;
use Inline 'CPP' => Config => LIBS => 'E:/';
use Inline 'CPP' => Config => INC => 'E:/';
use Inline 'CPP';
my $args = <STDIN>;
chomp $args;
my $result = main($args);
print $result;
__END__
__CPP__
#include <stdio.h>
#include <stdlib.h>
#include "solarlunar.h"
#include "solarlunar.c"
/**//* input format: sl -[s|l] year.month.day */
/**//* the lunar calendar date range is limited by solarlunar.h: 1899/12/1 ~ 2099.12.30 */
static void usage(void);
int main(int argc, char *argv[])
{
int year, month, day;
int i;
/**//* convert flag, 0: solar convert to luanr. 1: lunar convert solar */
int convert_f = 0;
solar_calendar so;
lunar_calendar lu;
/**//* input check */
if( argc < 3 || argv[1][0]!= '-' ||
!(argv[1][2] == 's' || argv[1][3] == 'l')) {
usage();
exit(1);
}
/**//* get convert flag */
convert_f = (argv[1][4] == 's' ? 0 : 1);
/**//* converting */
for(i = 2; i < argc; i++) {
sscanf(argv[i], "%d.%d.%d", &year, &month, &day);
switch(convert_f) ...{
case 0:
so = solar_creat_date(year, month, day);
lu = solar2lunar(so);
printf("%d.%d.%d ", lunar_get_year(lu), lunar_get_month(lu), lunar_get_day(lu));
break;
case 1:
lu = lunar_creat_date(year, month, day);
so = lunar2solar(lu);
printf("%d.%d.%d ", solar_get_year(so), solar_get_month(so), solar_get_day(so));
break;
default :
exit(2);
}
}
return 0;
}
static void usage(void)
{
printf("sl -[s|l] year1.month1.day1 year2.month2.day2 ... "
"-s: solar calendar date convert to lunar calendar date. "
"-l: lunar calendar date convert to lunar calendar date.");
}
Необходимую библиотеку можно скачать с [здесь] и [здесь].
Извините, неправильное место, чтобы положить вещи. ссылки теперь удалены.