J'ai besoin de construire un chemin de fichier dans un script Perl. Quel séparateur de chemin dois-je utiliser pour permettre à mon script de travailler sur Windows et Unix? P>
Gardez à l'esprit que Windows a besoin d'une lettre de lecteur. P>
5 Réponses :
Q: Quel séparateur de chemin dois-je utiliser pour permettre à mon script de fonctionner sur Windows et UNIX?
A: /. p>
Explanation: Windows can work similarly to Unix with / as path separator. (Mac OS uses : as a path separator instead of /). The File::Spec modules can also help. use File::Spec::Functions; chdir(updir()); # go up one directory $file = catfile(curdir(), 'temp', 'file.txt'); # on Unix and Win32, './temp/file.txt' # on Mac OS, ':temp:file.txt' # on VMS, '[.temp]file.txt' Source: http://www.xav.com/perl/lib/Pod/perlport.html
Non, Perl ne convertit pas / (sauf sur VMS, peut-être?) - Cela l'utilise simplement et cela fonctionne bien dans la plupart des appels de bibliothèque Windows C.
@ysth, le / fonctionne toujours bien sur mes fenêtres, tandis que \ provoque parfois des problèmes. Je pensais que ma réponse était au point, mais cela a été évanoui, alors je suis en train de devenir perplexe et j'essayais de trouver un soutien à ma réponse. Merci pour le commentaire. Que Perl convertit ou non, il est possible que je sois mal compris la question de l'OP.
@brian, merci pour le commentaire. La source (douteuse? Faux?) A été citée simplement pour soutenir ma réponse. N'est-il pas correct que le / fonctionne à la fois sur Windows et UNIX?
La nouvelle source est essentiellement correcte, oui, même si elle semble être une copie plus ancienne de Search.cpan.org/ Perldoc / Perlport
@Mike: citer des ordures aléatoires d'Internet ne rend pas votre réponse mieux que c'était. Il vaut mieux trouver la vraie réponse dans la documentation Perl plutôt que de compter sur une personne qui composait des choses en fonction de quelque chose qui a fonctionné accidentellement pour eux.
@brian, merci de commenter. Voici ma pensée: Perl ou toutes les personnes à différents niveaux bénéficient de différentes choses. Pour vous, quelque chose pourrait être des ordures mais pour d'autres, ce quelque chose pourrait être utile. J'ai lu beaucoup de vos réponses et je crois voir une chose très clairement: aucune infraction du tout, parfois parce que vous avez évidemment mal - estimé les arrière-plans de niveau / apprentissage de la poster, votre réponse semble assez pertinente. Mais bien sûr, lorsqu'une question est posée, elle est ouverte à l'interprétation et vous venez de vous répondre à votre manière. Eh bien, merci pour le commentaire à nouveau.
@brian, BTW, Voulez-vous éviter d'utiliser un mot argumentatif comme "ordures" publiquement, des mots neutres comme "obsolètes" ou "non pertinents"? Bien que vous soyez un gourou perl, il est un peu grossier d'appeler "la poubelle" des autres choses, n'est-ce pas?
J'appelle les ordures "Garbage", y compris mes propres ordures. Il n'y a pas de neutralité quand quelque chose est si malheureusement tort que le premier tripère que vous avez posté. Il mérite des mots forts pour décourager d'autres personnes de la croire et de la transmettre. Vous avez posté quelque chose que vous n'avez pas compris et que vous ne pouviez pas supporter comme une supposition. Vous avez posté des ordures.
@Mike: Si vous publiez quelque chose de public, vous devez être préparé pour qu'il soit critiqué - éventuellement brutalement. C'est idiot (et futile) de s'attendre à ce que les gens soient chausser leurs réponses. Les forums de programmation sont des méritocraties et non des concours de popularité. Les réponses peuvent être plutôt brusques mais en règle générale, c'est le post i> qui est critiqué, pas l'auteur. Ne le prenez pas personnellement.
@brian, l'utilisation de l'idiolecte argumentatif n'est pas conforme à l'esprit du SO. Mais "être torelant" est.
@Michael, merci de commenter. Différents forums sont différents. Je ne crois pas que la méritocratie est dans l'esprit de la sorte, mais "être torelant" est. La critique brutale n'est explicitement pas la tradition de la "sois gentille". Avez-vous déjà lu la section FAQ? Je suis perplexe.
@Michael et @brian, voici ma compréhension de l'esprit SO: Si nous ressentons l'impulsion de critiquer quelqu'un, nous utilisons des critiques constructives. Si nous critiquions de manière constructive, nous utilisons des mots neutres. Si nous pensons que quelque chose est évidemment faux, nous le laissons pourrir. Si nous pensons que quelque chose n'est pas malfaisant, nous soulignons les victimes potentielles à de bonnes sources et fournissent des raisons solides contre elle.
@MIKE: Le système de réputation est une méritocratie (ou au moins une approximation d'un). Si vous relisez les commentaires impartialement, vous constaterez que Brian critique ce que vous avez écrit i>, jamais Qui vous êtes. I> Cela ne veut pas dire que sa réponse n'aurait pas pu être meilleure Mais la critique constructive n'exige pas l'utilisation de gants d'enfant. Le laissant la pourriture n'est pas acceptable car l'erreur n'est pas évidente pour les novices. (Si vous aviez su que la première source que vous avez citée était fausse, n'auriez-vous pas toujours cité?) Il y a peu de point qu'il essaie de réparer quelque chose de complètement faux; D'où le fort avertissement à la place.
@MICHALE, bien que je ne suis toujours pas d'accord avec votre à ce sujet, j'apprécie votre explication. Cela n'a rien à voir avec le sucreCover quelque chose. Ce dont je parle est la priorité de l'utilisation de mots neutres dans un forum technologique. Les humains sont émotifs. Ils paient plus d'attention à la façon dont vous le dites que ce que vous dites. Lorsque vous utilisez des mots forts, ils sont distraits, provoqués, mais pas découragés. Comme je l'ai dit, si nous ne pensons pas que quelque chose est évidemment faux, puis fournissez une logique solide contre elle, ou des victimes potentielles sur les sources valables.
@Michael, @brian a dit qu'il appellerait également ses propres déchets et je pense que je comprends ce qu'il voulait dire. Nous pouvons utiliser s.o.b. ou m.f. Pour appeler un vrai ami proche, et il arrive que les Afro-Américains utilisent N.I.G ** er pour nous appeler. Dans ces situations, les taquineries sont conçues et comprises pour augmenter l'intimité entre les vrais amis. Mais nous ne pouvons pas malheureusement la situation. C'est un forum technologique où les gens sont invités à éviter d'être discutés et subjectifs comme indiqué dans la section FAQ.
Wow, quels beaucoup de tonalité stupide traîne. Les «dépassés» et «non pertinents» sont les mauvais mots - ils manquent la connotation de mauvais / inexacte / trompeuse / mauvaise que «les ordures» transmet. "Évitez d'être argumentatif"? WHOA, Kettle rencontre Pot. "Q: Quel séparateur de chemin dois-je utiliser pour permettre à mon script de travailler sur Windows et UNIX?" - mauvaise question (rechercher "xy problème"); La bonne question est correcte, comment une construction de manière générale
vous voulez Fichier :: Spec . Il existe des versions spécifiques pour Unix , win32 et
2 commentaires
Vous n'utilisez jamais les versions spécifiques à la plate-forme directement. Vous avez juste besoin de fichier :: spec. Il figure le reste pour vous.
Je conviens que vous ne devriez pas utiliser les versions spécifiques, c'est pourquoi ma réponse n'était que Fichier :: Spec avec un peu d'informations supplémentaires.
On dirait que vous utilisez le séparateur de trajectoire pour signifier le caractère entre les composants du répertoire / Nom de fichier. Mais juste au cas où vous vouliez dire l'autre signification: p>
Certaines choses (notamment les variables d'environnement telles que Manpath ou Perl5Lib), prenez une liste de noms de fichiers ou de répertoires, séparés par un caractère de séparateur de chemin. Le module de configuration de Perl fournit vitablement un tel caractère en tant que $ config :: config {'path_sep'}. P>
Si vous trouvez FICHIER :: SPECUT EXPLOBERTOMEDOME, AS que je le fais, essayez chemin :: Classe a>. Il vous donne des objets de répertoire et de fichiers à utiliser plutôt que de devoir appeler des méthodes de classe d'enroulement longues :: Méthodes de classe de spécifications sur les chaînes. P>