From: Ramon de C Valle Date: 2012-12-12T18:27:44+09:00 Subject: How I can create/extract a variable/hash into the current binding in Ruby? This is a cryptographically signed message in MIME format. --------------ms040207000307000306010503 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable Hi, How I can create/extract a variable/hash into the current binding in Ruby? For instance, the following results in a NameError: class Hash def extract(b) self.each do |key, value| bind =3D b.eval <<-END #{key} =3D nil proc { |value| #{key} =3D value } END bind.call(value) end end end hash =3D {:a =3D> 1} hash.extract(binding) puts a Noteworthy mentioning, each call to Kernel#binding returns a different Binding object instance, which makes me think that I'm not really changing the binding of the caller of Hash#extract. For instance, the following works: class Hash def extract(b) self.each do |key, value| bind =3D b.eval <<-END #{key} =3D nil proc { |value| #{key} =3D value } END bind.call(value) end end end hash =3D {:a =3D> 1} b =3D binding hash.extract(b) eval('puts a', b) Thanks, --=20 Ramon de C Valle / Red Hat Product Security Team --------------ms040207000307000306010503 Content-Type: application/pkcs7-signature; name="smime.p7s" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="smime.p7s" Content-Description: S/MIME Cryptographic Signature MIAGCSqGSIb3DQEHAqCAMIACAQExCzAJBgUrDgMCGgUAMIAGCSqGSIb3DQEHAQAAoIIMSDCC BVIwggQ6oAMCAQICEAqzP+sBemOzul4+4fzvl/kwDQYJKoZIhvcNAQEFBQAwgd0xCzAJBgNV BAYTAlVTMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjEfMB0GA1UECxMWVmVyaVNpZ24gVHJ1 c3QgTmV0d29yazE7MDkGA1UECxMyVGVybXMgb2YgdXNlIGF0IGh0dHBzOi8vd3d3LnZlcmlz aWduLmNvbS9ycGEgKGMpMDkxHjAcBgNVBAsTFVBlcnNvbmEgTm90IFZhbGlkYXRlZDE3MDUG A1UEAxMuVmVyaVNpZ24gQ2xhc3MgMSBJbmRpdmlkdWFsIFN1YnNjcmliZXIgQ0EgLSBHMzAe Fw0xMjA0MjQwMDAwMDBaFw0xMzA0MjQyMzU5NTlaMIIBFTEXMBUGA1UEChMOVmVyaVNpZ24s IEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0IE5ldHdvcmsxRjBEBgNVBAsTPXd3dy52 ZXJpc2lnbi5jb20vcmVwb3NpdG9yeS9SUEEgSW5jb3JwLiBieSBSZWYuLExJQUIuTFREKGMp OTgxHjAcBgNVBAsTFVBlcnNvbmEgTm90IFZhbGlkYXRlZDEzMDEGA1UECxMqRGlnaXRhbCBJ RCBDbGFzcyAxIC0gTmV0c2NhcGUgRnVsbCBTZXJ2aWNlMRkwFwYDVQQDFBBSYW1vbiBkZSBD IFZhbGxlMSEwHwYJKoZIhvcNAQkBFhJyY3ZhbGxlQHJlZGhhdC5jb20wggEiMA0GCSqGSIb3 DQEBAQUAA4IBDwAwggEKAoIBAQCtHIDnFV/HlKm9UnSRo6izQmlNfDgekHNzCaDbb91myLVY gYhZ0LGIjZGwQL5/biXWhKNudbn7wVX3w+RLplA3rRzId/pC/uOuw1NBljRwFRPFxPXNvnqz +aZUP+23mYNiFfKqFTNKP73D08k6FxCFwtqNWvKKdBqFA1PAQjs3vIAmn8gk/h21sN9CDn7I wO87OdfRrFPChpyJxCgBTVcfUlEK1xcMjbQSM8nNw15AkgkITDmxEclu3aehXViKEzWAiOmd B6oYN5Jo3Oh58PvjvWQlX07qPlJJ1XKJeZ8CpA4i7iNC7BXtFH15YzDb/Pw8VxqwhiAuyACA SqCFuNp1AgMBAAGjgdIwgc8wCQYDVR0TBAIwADBEBgNVHSAEPTA7MDkGC2CGSAGG+EUBBxcB MCowKAYIKwYBBQUHAgEWHGh0dHBzOi8vd3d3LnZlcmlzaWduLmNvbS9ycGEwCwYDVR0PBAQD AgWgMB0GA1UdJQQWMBQGCCsGAQUFBwMEBggrBgEFBQcDAjBQBgNVHR8ESTBHMEWgQ6BBhj9o dHRwOi8vaW5kYzFkaWdpdGFsaWQtZzMtY3JsLnZlcmlzaWduLmNvbS9JbmRDMURpZ2l0YWxJ RC1HMy5jcmwwDQYJKoZIhvcNAQEFBQADggEBAJkX3S0O1NP8uJa6rDOVBnsxGDyq/nMzOroc VVCKrmfsyQ48gcWBqo77QciFnzo04eaMa8uEajGdJwl7z8M0OrNTmNvNeUETE44RhEObHtBo /1+HoVh2sGbxHD82rqwFxyTZOk9A7/mTqbjqwAZF3YkvL4QhKoLAjvLqs7fWjYTIZWMoej5k PCzuHdvVc4pFLwkzjhx04IW5PozTPVnp+Ik2AaCieHn/gAsMYtglHs4OdXmbePxS2vU3Lf3O bfWE8Axgq+dwwYgUtLXR5LaA5FaMutUjcJg0ZrzzAtxyrh8MNeJmdNuHVot3eQgSsvIlo+cT d699EQKDq0uowKmnd9IwggbuMIIF1qADAgECAhBxFWYFSuSRIU3pvET5rNPcMA0GCSqGSIb3 DQEBBQUAMIHKMQswCQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNV BAsTFlZlcmlTaWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWdu LCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWduIENs YXNzIDEgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMzAeFw0w OTA1MDEwMDAwMDBaFw0xOTA0MzAyMzU5NTlaMIHdMQswCQYDVQQGEwJVUzEXMBUGA1UEChMO VmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0IE5ldHdvcmsxOzA5BgNV BAsTMlRlcm1zIG9mIHVzZSBhdCBodHRwczovL3d3dy52ZXJpc2lnbi5jb20vcnBhIChjKTA5 MR4wHAYDVQQLExVQZXJzb25hIE5vdCBWYWxpZGF0ZWQxNzA1BgNVBAMTLlZlcmlTaWduIENs YXNzIDEgSW5kaXZpZHVhbCBTdWJzY3JpYmVyIENBIC0gRzMwggEiMA0GCSqGSIb3DQEBAQUA A4IBDwAwggEKAoIBAQDtxEffKigdfAZru9chMslsE4/psY1BTjT32gvjavpliCALERPpm+BJ Totv1QHQXw1HkYpaTHQ+P8aRCbtMNJ6NbqGCUWL3aXZYlgevnhQYB09avZ/SMbJUGXNGahlC EewScyGN9dwwzeXZVgoxxTZtKRSXvS3aiUcZiNhLBD3rtjxnHnQAEw3QhtqTZ/gzA64aPGtp ePbALI7hgz93+Zn//p9SWsK0hwrYbKlHwVQpZUM+SsCWH8Gt93evbLEEXr7BtpQtl5AtJ9K7 HumDaoT2xLKuIwZlJqUnWCsHIrRvpmJIGnfy1VAnminTlvso9bokdmLjjFnr+27VQsS+Qcf1 AgMBAAGjggK5MIICtTA0BggrBgEFBQcBAQQoMCYwJAYIKwYBBQUHMAGGGGh0dHA6Ly9vY3Nw LnZlcmlzaWduLmNvbTASBgNVHRMBAf8ECDAGAQH/AgEAMHAGA1UdIARpMGcwZQYLYIZIAYb4 RQEHFwEwVjAoBggrBgEFBQcCARYcaHR0cHM6Ly93d3cudmVyaXNpZ24uY29tL2NwczAqBggr BgEFBQcCAjAeGhxodHRwczovL3d3dy52ZXJpc2lnbi5jb20vcnBhMDQGA1UdHwQtMCswKaAn oCWGI2h0dHA6Ly9jcmwudmVyaXNpZ24uY29tL3BjYTEtZzMuY3JsMA4GA1UdDwEB/wQEAwIB BjBuBggrBgEFBQcBDARiMGChXqBcMFowWDBWFglpbWFnZS9naWYwITAfMAcGBSsOAwIaBBRL a7kolgYMu9BSOJsprEsHiyEFGDAmFiRodHRwOi8vbG9nby52ZXJpc2lnbi5jb20vdnNsb2dv MS5naWYwLgYDVR0RBCcwJaQjMCExHzAdBgNVBAMTFlByaXZhdGVMYWJlbDQtMjA0OC0xMTgw HQYDVR0OBBYEFHlHYQhB/TgEokvntcz1Q/ZJKxH4MIHxBgNVHSMEgekwgeahgdCkgc0wgcox CzAJBgNVBAYTAlVTMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjEfMB0GA1UECxMWVmVyaVNp Z24gVHJ1c3QgTmV0d29yazE6MDgGA1UECxMxKGMpIDE5OTkgVmVyaVNpZ24sIEluYy4gLSBG b3IgYXV0aG9yaXplZCB1c2Ugb25seTFFMEMGA1UEAxM8VmVyaVNpZ24gQ2xhc3MgMSBQdWJs aWMgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEczghEAi1t1VoRUhQsAz684 SM6xpDANBgkqhkiG9w0BAQUFAAOCAQEAOU3PQZmBtakFtVI46TmEiWzkNKha59hsCUwkGrpZ pIc7cyHxk4HPv2hjWmf+NYUrocNdo0rCOhndMNbMTe/x0oGXylRaQ783i3qOGY0PQ6iM8q9g sxWKs5WcPOCesyeYpDVyF+X8Kl2H04oNwtFFKvjA9KwqkzrVrhJwCOv7O+J37OgrZDV2zbra 4NHLFNZxWJu+1T59ttnoJMUkZkxdkR92sxc+fw3GIYkvsze4of9csm1J3mVSQvsOiNLtSh2/ S+P4zHL6SA5ljknI1viZmDu3lD4xcQaH+mxZUy7X3yvtX2MArBXtA7hVFozGaAPnIqhzC7G8 oNpSWN0KDn/BgjGCBOwwggToAgEBMIHyMIHdMQswCQYDVQQGEwJVUzEXMBUGA1UEChMOVmVy aVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0IE5ldHdvcmsxOzA5BgNVBAsT MlRlcm1zIG9mIHVzZSBhdCBodHRwczovL3d3dy52ZXJpc2lnbi5jb20vcnBhIChjKTA5MR4w HAYDVQQLExVQZXJzb25hIE5vdCBWYWxpZGF0ZWQxNzA1BgNVBAMTLlZlcmlTaWduIENsYXNz IDEgSW5kaXZpZHVhbCBTdWJzY3JpYmVyIENBIC0gRzMCEAqzP+sBemOzul4+4fzvl/kwCQYF Kw4DAhoFAKCCAs4wGAYJKoZIhvcNAQkDMQsGCSqGSIb3DQEHATAcBgkqhkiG9w0BCQUxDxcN MTIxMjEyMDkyNzM4WjAjBgkqhkiG9w0BCQQxFgQU36d5ecrpIWTxZBfroPZ4Y/7OOiswXwYJ KoZIhvcNAQkPMVIwUDALBglghkgBZQMEAQIwCgYIKoZIhvcNAwcwDgYIKoZIhvcNAwICAgCA MA0GCCqGSIb3DQMCAgFAMAcGBSsOAwIHMA0GCCqGSIb3DQMCAgEoMIIBAwYJKwYBBAGCNxAE MYH1MIHyMIHdMQswCQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNV BAsTFlZlcmlTaWduIFRydXN0IE5ldHdvcmsxOzA5BgNVBAsTMlRlcm1zIG9mIHVzZSBhdCBo dHRwczovL3d3dy52ZXJpc2lnbi5jb20vcnBhIChjKTA5MR4wHAYDVQQLExVQZXJzb25hIE5v dCBWYWxpZGF0ZWQxNzA1BgNVBAMTLlZlcmlTaWduIENsYXNzIDEgSW5kaXZpZHVhbCBTdWJz Y3JpYmVyIENBIC0gRzMCEAqzP+sBemOzul4+4fzvl/kwggEFBgsqhkiG9w0BCRACCzGB9aCB 8jCB3TELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZW ZXJpU2lnbiBUcnVzdCBOZXR3b3JrMTswOQYDVQQLEzJUZXJtcyBvZiB1c2UgYXQgaHR0cHM6 Ly93d3cudmVyaXNpZ24uY29tL3JwYSAoYykwOTEeMBwGA1UECxMVUGVyc29uYSBOb3QgVmFs aWRhdGVkMTcwNQYDVQQDEy5WZXJpU2lnbiBDbGFzcyAxIEluZGl2aWR1YWwgU3Vic2NyaWJl ciBDQSAtIEczAhAKsz/rAXpjs7pePuH875f5MA0GCSqGSIb3DQEBAQUABIIBAAJZ7vGR4GM5 owTS6XpQLfdzT7yh355uE6k50L4Rty+hSpjebVk6BzNYwrCES9wynllkJb12W6pD0RiVrtbY Mq1HYADdiQJ1LXFQmgKeEpDgFX2W2WesviV0hEGoMZEjD4KZxD0kL5slvV9bkKWTjZquNuQP l8XJLwBjfoopAR9uwbINiPeq6ZXht+RGMxKNslFFfCKNMwXTwe6FbL8Jz1xipBUGvQud55fA MbB1QAS018S1q68ldt+wSg1M3Dkdo0l07kYX9Wkp+mV1bPUQ2XNKTqk6+UjcVAZqP65GSi9V RgPEJw6MlX7jSsNuuslMsJeenUfDsKk1aMUNAo8iB0AAAAAAAAA= --------------ms040207000307000306010503--