Forum Webscript.Ru

Программирование => Perl => Тема начата: smoker_cannabis от 25 Марта 2006, 18:16:02

Название: Структуры
Отправлено: smoker_cannabis от 25 Марта 2006, 18:16:02
в си есть понятие структура типа

struct {
int len;
char *str;
} p;

потом к ней можно обращаться как p.len и т.д.

Вопрос:  есть ли какие модули позволяющие реализовать структуры?
Название: Структуры
Отправлено: arto от 25 Марта 2006, 23:23:01
хешей не хватает? или необходим доступ до c-структур?
Название: Структуры
Отправлено: smoker_cannabis от 26 Марта 2006, 10:29:58
Цитировать
arto:
хешей не хватает?

дык все дело в том что надо структуру, а не хэш, массив или скаляр.

Цитировать
arto:
или необходим доступ до c-структур?

а что такое возможно? если да - скажите как, или где об этом найти  информацию.
Название: Структуры
Отправлено: arto от 26 Марта 2006, 12:25:20
непонятна сама постановка задачи.

посмотрите в сторону pack/unpack, perlxs и Inline::Struct.
Название: Структуры
Отправлено: smoker_cannabis от 26 Марта 2006, 16:34:56
arto
Inline::Struct  - то что надо, Большое спасибо.
Возникла проблема при использовании:
Скрипт из примера:

#!c:/usr/local/bin/perl -w
use Inline C;

   my $o = new Inline::Struct::JA_H("Perl");
   print JAxH($o), "\\n";
   $o->x("Inline");
   print JAxH($o), "\\n";

   __END__
   __C__
   struct JA_H {
      char *x;
   };
   typedef struct JA_H JA_H;

   SV *JAxH(JA_H *f) {
      return newSVpvf("Just Another %s Hacker", f->x);
   }

Но при запуске выдает ошибки:
Warning. No Inline C functions bound to Perl
Check your C function definition(s) for Inline compatibility
"nmake" _¥ ï¥âáï ¢_ãâà¥__¥© ¨«¨ ¢_¥è_¥©
ª®¬__¤®©, ¨á¯®«_塞®© ¯à®£à_¬¬®© ¨«¨ ¯_ª¥â_ë¬ ä_©«®¬.
A problem was encountered while attempting to compile and install your Inline
C code. The command that failed was:
  nmake > out.make 2>&1
The build directory was:
C:\\DOCUME~1\\ROOT~1.API\\LOCALS~1\\Temp\\_Inline\\build\\perltemp_pl_0236
To debug the problem, cd to the build directory, and inspect the output files.
INIT failed--call queue aborted

Почему???

Система: MS Windows XP SP2, perl 5.6.1 build 633 by ActiveState
Название: Структуры
Отправлено: arto от 26 Марта 2006, 17:04:02
Inline::C стоит?
Название: Структуры
Отправлено: smoker_cannabis от 26 Марта 2006, 17:47:32
arto
Да, я модуль Inline::Struct онлайн ставил, ppm там еще кучу чего накачал и установил, модуль Inline::C точно был !
Название: Структуры
Отправлено: arto от 26 Марта 2006, 21:45:27
компилятор/nmake есть?
Название: Структуры
Отправлено: Алан от 27 Марта 2006, 13:46:41
В общем где-то в Кэмел-Бук было написано про это...
Короче вместо struct создаёшь отдельный модуль типа my::struct где описываешь конкретные переменные... типа там было написано, что как-то можно при помощи pragma добиться того, что бы поля модуля трогать (добавлять/удалять) низя было... тока править. Получается как структура в Си. + Там же было описано как наследовать всё это дело. Всмысле создавать много структур из одного этого модуля

Но вообще лучше простые хэши и не парься $var->{name} :)
Название: Структуры
Отправлено: arto от 27 Марта 2006, 15:47:17
"поля модуля трогать (добавлять/удалять) низя было... тока править" -- а по-русски?
Название: Структуры
Отправлено: Алан от 27 Марта 2006, 16:21:46
Ну короче, смутно помню как это было написано, но что-то типа:

$var::field1 = 1
$var::field2 = 2

И т.п. получается... вот эти field нужно описывать в модуле.

Не помню в общем... надо Кэмел-Бук читать опять внимательно :)
Название: Структуры
Отправлено: smoker_cannabis от 27 Марта 2006, 17:09:49
всем ОГРОМНОЕ спасибо !!!
Название: Структуры
Отправлено: cr4ck3r от 28 Марта 2006, 11:27:05
а в чем проблема была и как решилась?
Название: Структуры
Отправлено: smoker_cannabis от 28 Марта 2006, 14:46:43
хотя по описанию мне очень (что в принципе и надо было) подходит модуль Inline::Struct, но разбираться чтоб он заработал - не было времени,
 
не стал изобретать велосипед и воспользовался хешами :)
Название: Структуры
Отправлено: arto от 28 Марта 2006, 14:59:28
"дык все дело в том что надо структуру, а не хэш, массив или скаляр."
Название: Структуры
Отправлено: smoker_cannabis от 28 Марта 2006, 15:32:04
arto
препод попался, ни си, ни перл не знает :)
проканала ссылка на анонимный хеш

$rec={
 NAME=>\'111\',
 BOOK=>\'222\',
 YEAR=>\'333\',
} ;

а че, немного похожи на структуру :) (фигурными скобками)
Название: Структуры
Отправлено: cr4ck3r от 28 Марта 2006, 17:54:54
Я просто заинтересовался этим модулем, в связи с тем что хочу попробовать реализовать работу с RAW сокетами через него. То есть написать код на С по формированию и отправки пакета, а данные для этого пакета передавать в Сишную функцию средствами Perl.