2015-12-03 1 views
1

Je lis le CIF (cadre Intelligence collective) source code on GitHubPourquoi y a-t-il deux signes @ dans une constante?

Dans le fichier src/lib/CIF/Generated.pm.in j'ai vu une déclaration comme celle-

use constant PROTOCOL_VERSION => @[email protected]; 

Pourquoi deux à des signes@?

package CIF; 

use warnings; 
use strict; 

use constant VERSION => '@[email protected]@[email protected]@[email protected]@[email protected]'; 
our ($MAJOR_VERSION, $MINOR_VERSION, $PATCH, $META) = VERSION =~ /^(\d+)\.(\d+)\.(\d+)-?([\w\.\d]+)?$/; 

use constant PROTOCOL_VERSION => @[email protected]; 
use constant ORG    => '@[email protected]'; 
use constant DEFAULT_PORT  => @[email protected]; 

use constant DEFAULT_FRONTEND_PORT   => DEFAULT_PORT(); 
use constant DEFAULT_BACKEND_PORT   => (DEFAULT_PORT() + 1); 
use constant DEFAULT_PUBLISHER_PORT   => (DEFAULT_PORT() + 2); 
use constant DEFAULT_STATS_PUBLISHER_PORT => (DEFAULT_PORT() + 3); 

our $CIF_USER = '@[email protected]'; 
our $CIF_GROUP = '@[email protected]'; 

our $BasePath = '@[email protected]'; 

our $LibPath = '@[email protected]'; 
our $EtcPath = '@[email protected]'; 
our $VarPath = '@[email protected]'; 

our $LogPath = $VarPath.'/log'; 
our $PidPath = $VarPath.'/run'; 

our $BinPath = $BasePath . '/bin'; 
our $SbinPath = $BasePath . '/sbin'; 


our $SmrtRulesPath  = $EtcPath . '/rules'; 
our $SmrtRulesDefault = $SmrtRulesPath . '/default'; 
our $SmrtRulesLocal  = $SmrtRulesPath . '/local'; 

1; 
+0

source: https://github.com/csirtgadgets/massive-octo-spice/blob/f01b0c676f653b30713dc0618324a69dd360c081/src/lib/CIF/Generated.pm.dans –

+0

@MSU_Bulldog: Ce n'est pas parce que vous avez atteint le seuil d'expérience qui vous permet d'éditer des questions que vous devriez *. Vos changements sont terribles: veuillez les rétracter car ils gênent les meilleures modifications – Borodin

Répondre

2

Ceux-ci n'ont pas de signification Perl. Les chaînes avec des guillemets simples ' n'ont pas d'interpolation de variable, donc ce sont des caractères littéraux @, pas @CIF_USER ou des tableaux similaires.

La ligne que vous avez mentionnée contient en fait une erreur de syntaxe en Perl.

use constant DEFAULT_PORT  => @[email protected]; 

Cependant, le fait que certains d'entre eux sont entre guillemets et d'autres ne sont pas me portent à croire que ce sont le code fait modèle, et que ce fichier seront traitées par une sorte de moteur de templating avant d'être dirigé par Perl. Dans ce cas, @[email protected] sera toujours un nombre, il n'a donc pas besoin de guillemets. Dans le même temps, '@[email protected]' pourrait donner un nom d'utilisateur, qui contiendrait probablement des choses qui ne sont pas des nombres, il faut donc les citer.

Mise à jour:This answer à une question connexe explique que les fichiers .in sont généralement utilisés comme entrée pour autoconf.

9

.pm.in n'est pas une extension normale pour le code Perl. Plutôt, .in indique normalement un modèle d'une sorte qui est utilisé pour générer un fichier avec le même nom mais avec .in supprimé.

Dans ce cas, le système de modèle est Autoconf. Si vous regardez dans configure.ac, vous verrez

AC_CONFIG_FILES([ 
    Makefile 
    src/Makefile.PL 
    src/lib/CIF/Generated.pm 
    elasticsearch/Makefile 
    hacking/packaging/ubuntu/default/cif 
]) 

Cela signifie que src/lib/CIF/Generated.pm sera généré à partir src/lib/CIF/Generated.pm.in lorsque configure fonctionne. Les symboles @[email protected] (appelés Autoconf "output variables") sont remplacés par les options configurées à ce moment-là. Ils ne sont pas de la syntaxe Perl, ils sont la syntaxe du modèle Autoconf. En d'autres termes, Generated.pm.in n'est pas un code Perl; c'est un modèle à partir duquel Autoconf peut générer du code Perl. Une ligne comme

use constant PROTOCOL_VERSION => @[email protected]; 

deviendrait

use constant PROTOCOL_VERSION => 1; 

dans src/lib/CIF/Generated.pm si configure détermine que CIF_PROTOCOL_VERSION doit être 1. Comment configure décide qui est trop complexe pour expliquer ici; lisez le Autoconf manual pour plus de détails.

+0

Je cherchais ce fichier, mais je n'ai pas réussi à le trouver. – simbabque

+0

Merci beaucoup! – duye

+0

@duye, de rien. Si cela répond à votre question, vous pouvez l'indiquer en cliquant sur la coche de la partition. – cjm