Автор Тема: Структуры  (Прочитано 10506 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн smoker_cannabis

  • Завсегдатай
  • Пользователь
  • **
  • Сообщений: 71
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Структуры
« : 25 Марта 2006, 18:16:02 »
в си есть понятие структура типа

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

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

Вопрос:  есть ли какие модули позволяющие реализовать структуры?
э, не понял

Оффлайн arto

  • Ветеран
  • *****
  • Сообщений: 699
  • +0/-0
  • 2
    • Просмотр профиля
Структуры
« Ответ #1 : 25 Марта 2006, 23:23:01 »
хешей не хватает? или необходим доступ до c-структур?

Оффлайн smoker_cannabis

  • Завсегдатай
  • Пользователь
  • **
  • Сообщений: 71
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Структуры
« Ответ #2 : 26 Марта 2006, 10:29:58 »
Цитировать
arto:
хешей не хватает?

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

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

а что такое возможно? если да - скажите как, или где об этом найти  информацию.
э, не понял

Оффлайн arto

  • Ветеран
  • *****
  • Сообщений: 699
  • +0/-0
  • 2
    • Просмотр профиля
Структуры
« Ответ #3 : 26 Марта 2006, 12:25:20 »
непонятна сама постановка задачи.

посмотрите в сторону pack/unpack, perlxs и Inline::Struct.

Оффлайн smoker_cannabis

  • Завсегдатай
  • Пользователь
  • **
  • Сообщений: 71
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Структуры
« Ответ #4 : 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

  • Ветеран
  • *****
  • Сообщений: 699
  • +0/-0
  • 2
    • Просмотр профиля
Структуры
« Ответ #5 : 26 Марта 2006, 17:04:02 »
Inline::C стоит?

Оффлайн smoker_cannabis

  • Завсегдатай
  • Пользователь
  • **
  • Сообщений: 71
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Структуры
« Ответ #6 : 26 Марта 2006, 17:47:32 »
arto
Да, я модуль Inline::Struct онлайн ставил, ppm там еще кучу чего накачал и установил, модуль Inline::C точно был !
э, не понял

Оффлайн arto

  • Ветеран
  • *****
  • Сообщений: 699
  • +0/-0
  • 2
    • Просмотр профиля
Структуры
« Ответ #7 : 26 Марта 2006, 21:45:27 »
компилятор/nmake есть?

Оффлайн Алан

  • Завсегдатай
  • Новичок
  • *
  • Сообщений: 31
  • +0/-0
  • 0
    • Просмотр профиля
    • http://alanrin.com
Структуры
« Ответ #8 : 27 Марта 2006, 13:46:41 »
В общем где-то в Кэмел-Бук было написано про это...
Короче вместо struct создаёшь отдельный модуль типа my::struct где описываешь конкретные переменные... типа там было написано, что как-то можно при помощи pragma добиться того, что бы поля модуля трогать (добавлять/удалять) низя было... тока править. Получается как структура в Си. + Там же было описано как наследовать всё это дело. Всмысле создавать много структур из одного этого модуля

Но вообще лучше простые хэши и не парься $var->{name} :)

Оффлайн arto

  • Ветеран
  • *****
  • Сообщений: 699
  • +0/-0
  • 2
    • Просмотр профиля
Структуры
« Ответ #9 : 27 Марта 2006, 15:47:17 »
"поля модуля трогать (добавлять/удалять) низя было... тока править" -- а по-русски?

Оффлайн Алан

  • Завсегдатай
  • Новичок
  • *
  • Сообщений: 31
  • +0/-0
  • 0
    • Просмотр профиля
    • http://alanrin.com
Структуры
« Ответ #10 : 27 Марта 2006, 16:21:46 »
Ну короче, смутно помню как это было написано, но что-то типа:

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

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

Не помню в общем... надо Кэмел-Бук читать опять внимательно :)

Оффлайн smoker_cannabis

  • Завсегдатай
  • Пользователь
  • **
  • Сообщений: 71
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Структуры
« Ответ #11 : 27 Марта 2006, 17:09:49 »
всем ОГРОМНОЕ спасибо !!!
э, не понял

Оффлайн cr4ck3r

  • Фанат Perl
  • Постоялец
  • ***
  • Сообщений: 146
  • +0/-0
  • 2
    • Просмотр профиля
    • http://perlmonks.org.ru
Структуры
« Ответ #12 : 28 Марта 2006, 11:27:05 »
а в чем проблема была и как решилась?
Ворота в perl - perlmonks.org.ru

Оффлайн smoker_cannabis

  • Завсегдатай
  • Пользователь
  • **
  • Сообщений: 71
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Структуры
« Ответ #13 : 28 Марта 2006, 14:46:43 »
хотя по описанию мне очень (что в принципе и надо было) подходит модуль Inline::Struct, но разбираться чтоб он заработал - не было времени,
 
не стал изобретать велосипед и воспользовался хешами :)
э, не понял

Оффлайн arto

  • Ветеран
  • *****
  • Сообщений: 699
  • +0/-0
  • 2
    • Просмотр профиля
Структуры
« Ответ #14 : 28 Марта 2006, 14:59:28 »
"дык все дело в том что надо структуру, а не хэш, массив или скаляр."

 

Sitemap 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28