2010-07-11 26 views
6

के भीतर सिस्टम आर्किटेक्चर निर्धारित करना मैं यह निर्धारित करने का एक आसान तरीका ढूंढ रहा हूं कि एक प्रणाली 32- या 64-बिट पर्ल 5 के भीतर से है या नहीं। मैंने perlvar मैन्युअल पृष्ठ को पीछे और आगे पढ़ा है, और मुझे पता नहीं चला है वेरिएबल जिसमें सिस्टम के सीपीयू आर्किटेक्चर (सीपीयू आर्किटेक्चर पर्ल को संकलित किया गया था, पर्याप्त निकट आ जाएगा)। यह सबसे नज़दीक है:स्पष्ट रूप से पर्ल

chomp (my $arch = `uname -m`); 

मैं सोच रहा था कि यह निर्धारित करने का एक और शानदार तरीका था; मुझे बैकटिक एक्सप्रेशन पर भरोसा करने से नफरत है, क्योंकि वे दोनों बाधाएं हैं, असुरक्षित हैं, और अक्सर (यह उदाहरण विशेष रूप से) क्रॉस-प्लेटफार्म संगतता को तोड़ता है। ऐसा कोई कारण नहीं है कि पर्ल को पहले से ही यह जानकारी उपलब्ध नहीं होनी चाहिए।

+0

आप इस के आधार पर कर रहे हैं? यदि आप क्रॉस-प्लेटफार्म संगतता के बारे में चिंतित हैं, तो ऐसा लगता है कि यह कुछ विशिष्ट होगा जो उचित उत्तर को बहुत प्रभावित करेगा। – ysth

+0

@ytsh: मैं इस विशेष लिपि में क्रॉस-प्लेटफार्म संगतता के बारे में चिंतित नहीं हूं; मैं बस रेखांकित कर रहा था कि मुझे बैकटीक्स का उपयोग क्यों पसंद नहीं आया। आप सही हैं, यद्यपि। – amphetamachine

+0

फिर भी, आप इस पर आधारित अलग-अलग क्या कर रहे हैं? – ysth

उत्तर

10

Config मॉड्यूल देखें।

शायद यह जांच कर रहा है कि $Config{'archname64'} सेट पर्याप्त होगा।

+7

यह उन लोगों में से एक हो सकता है "आप वास्तव में क्या जानना चाहते हैं?" प्रशन। संरचना एन/डिकोडिंग के लिए आप '$ Config {alignbytes}' या '$ Config {byteorder}' का निरीक्षण करना चाहेंगे; यदि आप पूर्णांक श्रेणी में रूचि रखते हैं तो आप '$ Config {intsize}' या '$ Config {ivsize}' (जो मुझे लगता है अपेक्षाकृत नया है) आदि आदि हो सकता है। – hobbs

0

आप POSIX मॉड्यूल का उपयोग कर सकते हैं जो uname फ़ंक्शन को समान उपयोगिता के समान प्रदान करता है।

use POSIX(); 

my ($sysname, $nodename, $release, $version, $machine) = POSIX::uname; 

या, आपके मामले में:

my $arch = (POSIX::uname)[4]; 
संबंधित मुद्दे