[perl]Variable avant et après "use strict;&qu

kepon -  
lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   -
Bonjour, voilà j'ai un script perl auquelle je veu ajouter une fonction de création de base de donnée suivant un utilisateur... la variiable $user1 est valide dans la 1er partie du script mais pas dans la 2de... (use strict;)... donc voilà mon bute est de que $user1 = $user2 mais comment faire???

voilà un bout de mon code :

#!/usr/bin/perl

#1er PARTIE DU SCRIPT
#tous le début du script
$user1 = "toto";
#tous le rest de mon script...

#2ème partie du script
  use strict;
  use DBI();
  # Connect to the database.
  my $dbh = DBI->connect("DBI:mysql:database=mysql;host=localhost",
                         "root", "passroot",
                         {'RaiseError' => 1});
my $user2 = $user1;
$dbh->do("CREATE DATABASE $user2");
  # Disconnect from the database.
  $dbh->disconnect(); 

3 réponses

  1. lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 571
     
    Salut,

      # Connect to the database.
     my $dbh = DBI->connect("DBI:mysql:database=mysql;host=localhost",
                            "root", "passroot",
                            {'RaiseError' => 1});
    my $user2 = $user1;
    $dbh->do("CREATE DATABASE $user2");
     # Disconnect from the database.
     $dbh->disconnect(); 


    Donc tu as le descripteur de ta base de donnée mysql dans la variable $dbh.

    Ensuite tu fait un $dbh->do("CREATE DATABASE $user2) qui n'est pas logique.

    Dans une base de donnée on peut créer une table mais pas une autre base.

    En ce qui concerne les variables $user1 et my $user2, je ne vois pas la raison pour laquelle tu n'utilise pas use strict au début de ton script. Tu peut entourré avec des accolades {} les parties de script pour limiter la portée de tes variables.
    Mais tu fais comme tu veux.

    Voilà une solution pour ton problème avec les variables $user1 et my $user2
    #! /usr/bin/perl
    
    $user1="toto";
    sub var { return $user1 }
    
    use strict;
    
    # my $user2=$user1 ne fonctionne pas à cause de use strict
    #Global symbol "$user1" requires explicit package name
    
    my $user2=var;# en revanche la fonction var nous retourne $user1
    print "$user2\n";# maintenant $user2 vaut toto
    
    0
  2. lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 571
     
    Re,

    Voilà encore 2 façon de le faire
    1. utilisation de our
    #! /usr/bin/perl
    our $user1="toto";
    
    use strict;
    my $user2=$user1;
    print "$user2\n";
    2. utilisation de my
    #! /usr/bin/perl
    my $user1="toto";
    
    use strict;
    my $user2=$user1;
    print "$user2\n";
    
    0