Je voudrais faire un petit script, qui remplira un hachage d'un million
d'entrées. Je suppose que c'est beaucoup tros gros, et que je vais devoir
utiliser à la place une base de données.
Est-ce que perl propose un moyen de faire la chose plus simplement (voire,
est-ce que monter ma swap à 2 Go reglerait le problème) ?
Est-ce que perl propose un moyen de faire la chose plus simplement (voire, est-ce que monter ma swap à 2 Go reglerait le problème) ?
Mettre le hash dans un DB_File sur disque est plus économique.
Merci beaucoup, c'est exactement ce que je cherchais!
-- Charles
dominix
Charles Plessy wrote:
Bonjour,
Je voudrais faire un petit script, qui remplira un hachage d'un million d'entrées. Je suppose que c'est beaucoup tros gros, et que je vais devoir utiliser à la place une base de données.
Est-ce que perl propose un moyen de faire la chose plus simplement (voire, est-ce que monter ma swap à 2 Go reglerait le problème) ?
veuillez voir DBM::Deep ! l'est suppose faire ça.
-- dominix
Charles Plessy wrote:
Bonjour,
Je voudrais faire un petit script, qui remplira un hachage d'un
million d'entrées. Je suppose que c'est beaucoup tros gros, et que je
vais devoir utiliser à la place une base de données.
Est-ce que perl propose un moyen de faire la chose plus simplement
(voire, est-ce que monter ma swap à 2 Go reglerait le problème) ?
Je voudrais faire un petit script, qui remplira un hachage d'un million d'entrées. Je suppose que c'est beaucoup tros gros, et que je vais devoir utiliser à la place une base de données.
Est-ce que perl propose un moyen de faire la chose plus simplement (voire, est-ce que monter ma swap à 2 Go reglerait le problème) ?
veuillez voir DBM::Deep ! l'est suppose faire ça.
-- dominix
Charles Plessy
Laurent Wacrenier wrote:
Charles Plessy écrit:
Est-ce que perl propose un moyen de faire la chose plus simplement (voire, est-ce que monter ma swap à 2 Go reglerait le problème) ?
Mettre le hash dans un DB_File sur disque est plus économique.
J'ai un problème, et je me demande si c'est lié à l'utisation de DB_File: Je voudrais que mon hachage contienne des tableaux anonymes, or le script ci-dessous me donne l'erreur suivante :
Can't use string ("ARRAY(0x81d896c)") as an ARRAY ref while "strict refs"
Dois-je en conclure que la référence est changée en banale chaîne de caractères? (et que le contenu du tableau anonyme n'est pas stocké?
Dois-je changer le tableau en concaténation de chaînes (ce qui ne poserait pas trop de problèmes...) ?
-- Charles
use strict; use DB_File;
my $file = shift; our %h; tie %h, "DB_File", $file;
my $seq = 'TCTTACTACTATATCCTCCATATCCTATATACTAT'; my $seq_name = 'toto'; my $oligo_length = "5";
while ($seq =~ /(.{$oligo_length})/ ) { # on va déplacer une fenêtre $h{$1} = [] unless $h{$1} ; # Il faut un tableau anonyme my $refarray = $h{$1}; # on récupère la référence push (@$refarray, $seq_name); # on ajoute un élément $seq =~ s/.//; # Raccourcit la séquence }
untie %h;
Laurent Wacrenier wrote:
Charles Plessy <plessy@igbmc.u-strasbg.fr> écrit:
Est-ce que perl propose un moyen de faire la chose plus simplement
(voire, est-ce que monter ma swap à 2 Go reglerait le problème) ?
Mettre le hash dans un DB_File sur disque est plus économique.
J'ai un problème, et je me demande si c'est lié à l'utisation de DB_File: Je
voudrais que mon hachage contienne des tableaux anonymes, or le script
ci-dessous me donne l'erreur suivante :
Can't use string ("ARRAY(0x81d896c)") as an ARRAY ref while "strict refs"
Dois-je en conclure que la référence est changée en banale chaîne de
caractères? (et que le contenu du tableau anonyme n'est pas stocké?
Dois-je changer le tableau en concaténation de chaînes (ce qui ne poserait
pas trop de problèmes...) ?
--
Charles
use strict;
use DB_File;
my $file = shift;
our %h;
tie %h, "DB_File", $file;
my $seq = 'TCTTACTACTATATCCTCCATATCCTATATACTAT';
my $seq_name = 'toto';
my $oligo_length = "5";
while ($seq =~ /(.{$oligo_length})/ ) { # on va déplacer une fenêtre
$h{$1} = [] unless $h{$1} ; # Il faut un tableau anonyme
my $refarray = $h{$1}; # on récupère la référence
push (@$refarray, $seq_name); # on ajoute un élément
$seq =~ s/.//; # Raccourcit la séquence
}
Est-ce que perl propose un moyen de faire la chose plus simplement (voire, est-ce que monter ma swap à 2 Go reglerait le problème) ?
Mettre le hash dans un DB_File sur disque est plus économique.
J'ai un problème, et je me demande si c'est lié à l'utisation de DB_File: Je voudrais que mon hachage contienne des tableaux anonymes, or le script ci-dessous me donne l'erreur suivante :
Can't use string ("ARRAY(0x81d896c)") as an ARRAY ref while "strict refs"
Dois-je en conclure que la référence est changée en banale chaîne de caractères? (et que le contenu du tableau anonyme n'est pas stocké?
Dois-je changer le tableau en concaténation de chaînes (ce qui ne poserait pas trop de problèmes...) ?
-- Charles
use strict; use DB_File;
my $file = shift; our %h; tie %h, "DB_File", $file;
my $seq = 'TCTTACTACTATATCCTCCATATCCTATATACTAT'; my $seq_name = 'toto'; my $oligo_length = "5";
while ($seq =~ /(.{$oligo_length})/ ) { # on va déplacer une fenêtre $h{$1} = [] unless $h{$1} ; # Il faut un tableau anonyme my $refarray = $h{$1}; # on récupère la référence push (@$refarray, $seq_name); # on ajoute un élément $seq =~ s/.//; # Raccourcit la séquence }
untie %h;
Charles Plessy
Charles Plessy wrote:
Laurent Wacrenier wrote:
Charles Plessy écrit:
Est-ce que perl propose un moyen de faire la chose plus simplement (voire, est-ce que monter ma swap à 2 Go reglerait le problème) ?
Mettre le hash dans un DB_File sur disque est plus économique.
J'ai un problème, et je me demande si c'est lié à l'utisation de DB_File: Je voudrais que mon hachage contienne des tableaux anonymes, or le script ci-dessous me donne l'erreur suivante :
Can't use string ("ARRAY(0x81d896c)") as an ARRAY ref while "strict refs"
Dois-je en conclure que la référence est changée en banale chaîne de caractères? (et que le contenu du tableau anonyme n'est pas stocké?
Dois-je changer le tableau en concaténation de chaînes (ce qui ne poserait pas trop de problèmes...) ?
Je me réponds à moi-même, car je viens de trouver la réponse dans "Perl DBI, le guide du développeur" (O'Reilly).
On ne peut effectivement pas stocker de telles structures de manière transparente dans une base de données Berkeley.
-- Charles
Charles Plessy wrote:
Laurent Wacrenier wrote:
Charles Plessy <plessy@igbmc.u-strasbg.fr> écrit:
Est-ce que perl propose un moyen de faire la chose plus simplement
(voire, est-ce que monter ma swap à 2 Go reglerait le problème) ?
Mettre le hash dans un DB_File sur disque est plus économique.
J'ai un problème, et je me demande si c'est lié à l'utisation de DB_File:
Je voudrais que mon hachage contienne des tableaux anonymes, or le script
ci-dessous me donne l'erreur suivante :
Can't use string ("ARRAY(0x81d896c)") as an ARRAY ref while "strict refs"
Dois-je en conclure que la référence est changée en banale chaîne de
caractères? (et que le contenu du tableau anonyme n'est pas stocké?
Dois-je changer le tableau en concaténation de chaînes (ce qui ne poserait
pas trop de problèmes...) ?
Je me réponds à moi-même, car je viens de trouver la réponse dans "Perl DBI,
le guide du développeur" (O'Reilly).
On ne peut effectivement pas stocker de telles structures de manière
transparente dans une base de données Berkeley.
Est-ce que perl propose un moyen de faire la chose plus simplement (voire, est-ce que monter ma swap à 2 Go reglerait le problème) ?
Mettre le hash dans un DB_File sur disque est plus économique.
J'ai un problème, et je me demande si c'est lié à l'utisation de DB_File: Je voudrais que mon hachage contienne des tableaux anonymes, or le script ci-dessous me donne l'erreur suivante :
Can't use string ("ARRAY(0x81d896c)") as an ARRAY ref while "strict refs"
Dois-je en conclure que la référence est changée en banale chaîne de caractères? (et que le contenu du tableau anonyme n'est pas stocké?
Dois-je changer le tableau en concaténation de chaînes (ce qui ne poserait pas trop de problèmes...) ?
Je me réponds à moi-même, car je viens de trouver la réponse dans "Perl DBI, le guide du développeur" (O'Reilly).
On ne peut effectivement pas stocker de telles structures de manière transparente dans une base de données Berkeley.
-- Charles
Paul GABORIT
À (at) Fri, 27 Feb 2004 18:05:46 +0100, Charles Plessy écrivait (wrote):
J'ai un problème, et je me demande si c'est lié à l'utisation de DB_File: Je voudrais que mon hachage contienne des tableaux anonymes, or le script ci-dessous me donne l'erreur suivante :
Can't use string ("ARRAY(0x81d896c)") as an ARRAY ref while "strict refs"
Dois-je en conclure que la référence est changée en banale chaîne de caractères? (et que le contenu du tableau anonyme n'est pas stocké?
Utilisez MLDBM. C'est un module qui se charge de sérialiser les données liées à chacune des clés de votre table de hachage avant d'utiliser le module de stockage (DB_File dans votre cas).
use MLDBM qw(DB_File Storable);
Cela vous oblige à passer par une TIEHASH mais comme vous le faisiez déjà... tout va bien ;-)
Les données à sérialiser peuvent être un tableau anomyme ou n'importe quelle autre structure plus ou moins complexe. Mais elles ne doivent pas contener de closure (des sub anonymes). Une autre limitiation à noter porte sur les références vers une même donnée qui apparaitraient dans plusieurs valeurs. Cette donnée sera dupliquée lors de la relecture.
-- Paul Gaborit - <http://www.enstimac.fr/~gaborit/> Perl en français - <http://www.enstimac.fr/Perl/>
À (at) Fri, 27 Feb 2004 18:05:46 +0100,
Charles Plessy <plessy@igbmc.u-strasbg.fr> écrivait (wrote):
J'ai un problème, et je me demande si c'est lié à l'utisation de DB_File: Je
voudrais que mon hachage contienne des tableaux anonymes, or le script
ci-dessous me donne l'erreur suivante :
Can't use string ("ARRAY(0x81d896c)") as an ARRAY ref while "strict refs"
Dois-je en conclure que la référence est changée en banale chaîne de
caractères? (et que le contenu du tableau anonyme n'est pas stocké?
Utilisez MLDBM. C'est un module qui se charge de sérialiser les données liées
à chacune des clés de votre table de hachage avant d'utiliser le module de
stockage (DB_File dans votre cas).
use MLDBM qw(DB_File Storable);
Cela vous oblige à passer par une TIEHASH mais comme vous le faisiez
déjà... tout va bien ;-)
Les données à sérialiser peuvent être un tableau anomyme ou n'importe quelle
autre structure plus ou moins complexe. Mais elles ne doivent pas contener de
closure (des sub anonymes). Une autre limitiation à noter porte sur les
références vers une même donnée qui apparaitraient dans plusieurs
valeurs. Cette donnée sera dupliquée lors de la relecture.
--
Paul Gaborit - <http://www.enstimac.fr/~gaborit/>
Perl en français - <http://www.enstimac.fr/Perl/>
À (at) Fri, 27 Feb 2004 18:05:46 +0100, Charles Plessy écrivait (wrote):
J'ai un problème, et je me demande si c'est lié à l'utisation de DB_File: Je voudrais que mon hachage contienne des tableaux anonymes, or le script ci-dessous me donne l'erreur suivante :
Can't use string ("ARRAY(0x81d896c)") as an ARRAY ref while "strict refs"
Dois-je en conclure que la référence est changée en banale chaîne de caractères? (et que le contenu du tableau anonyme n'est pas stocké?
Utilisez MLDBM. C'est un module qui se charge de sérialiser les données liées à chacune des clés de votre table de hachage avant d'utiliser le module de stockage (DB_File dans votre cas).
use MLDBM qw(DB_File Storable);
Cela vous oblige à passer par une TIEHASH mais comme vous le faisiez déjà... tout va bien ;-)
Les données à sérialiser peuvent être un tableau anomyme ou n'importe quelle autre structure plus ou moins complexe. Mais elles ne doivent pas contener de closure (des sub anonymes). Une autre limitiation à noter porte sur les références vers une même donnée qui apparaitraient dans plusieurs valeurs. Cette donnée sera dupliquée lors de la relecture.
-- Paul Gaborit - <http://www.enstimac.fr/~gaborit/> Perl en français - <http://www.enstimac.fr/Perl/>